Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Type Challengesに新しい問題を追加して Type ChallengesのMain...

Avatar for Kanon Kanon
May 24, 2025

Type Challengesに新しい問題を追加して Type ChallengesのMaintainerになった話

TSKaigi 2025の登壇資料です。

Avatar for Kanon

Kanon

May 24, 2025
Tweet

More Decks by Kanon

Other Decks in Technology

Transcript

  1. 19 全問解いたれ • 結論: 全部解く必要はないと思う ◦ hardからは型システムで計算とかし始める ◦ 「すごいけど実戦でいつ使うんそれ」な問題が大半 ◦

    mediumまでを3周くらいすれば実戦でも勝手に手が動くようになる ◦ その頃にはOSSライブラリの型定義とかも難なく「読める、読めるぞぉ」となる(と思う) • 「Type Challengesは全問解く意味はない」という意見が本当か確かめるためにも解いた ◦ 自分もそれを言うためには全部解く必要があると思ったから 初心者編
  2. 20 全問解いたれ • 結論: 全部解く必要はないと思う ◦ hardからは型システムで計算とかし始める ◦ 「すごいけど実戦でいつ使うんそれ」な問題が大半 ◦

    mediumまでを3周くらいすれば実戦でも勝手に手が動くようになる ◦ その頃にはOSSライブラリの型定義とかも難なく「読める、読めるぞぉ」となる(と思う) • 「Type Challengesは全問解く意味はない」という意見が本当か確かめるためにも解いた ◦ 自分もそれを言うためには全部解く必要があると思ったから 作者のAnthonyさん曰く 「mediumくらいまで解ければ普通にすごい」 って一昨日のスピーカーディナーで言ってた 初心者編
  3. 28 IsAlphabet type IsAlphabet<S extends string> = any type cases

    = [ Expect<Equal<IsAlphabet<'A'>, true>>, Expect<Equal<IsAlphabet<'z'>, true>>, Expect<Equal<IsAlphabet<'9'>, false>>, Expect<Equal<IsAlphabet<'!'>, false>>, Expect<Equal<IsAlphabet<'😂'>, false>>, Expect<Equal<IsAlphabet<''>, false>> ] あとで解きたい人はここから 中・上級者編
  4. 30 IsAlphabet 解答例 type IsAlphabet<S extends string> = Uppercase<S> extends

    Lowercase<S> ? false : true; 受け取ったSが大文字にしても小文字にしても同じものはAlphabetでない • “A” と “a” • “!”, “😂”, “9”
  5. 33 Maintainerになった経緯 中・上級者編 • Type Challengesでレベルを上げたあとはUnJSにたくさんコントリビュートしてた • そこでAnthonyさんに何度かレビューしてもらう機会があった ◦ それこそ、ぶっ壊れてたlinterの設定修正とか

    • その後blueskyで相互フォローになりちょこちょこ話すことがあった • 一昨日のスピーカーディナーで ”はじめまして”して、Type Challegesの話題になった • 自分が書いたZenn Bookを見てもらったところ、「メンテナーやってみる?」とお誘いをいただく というジョブズもびっくりな ”Connect the dots”確変イベントが発生した 当初このLTは問題追加したところで終わりだった
  6. 35 まとめ • いい教材(インプット材料 )を読んで、 Type Challengesのmediumまでを3 周くらいする と学習効果が高そう ◦

    型システム周りを手を止めずにコーディングできるようになってくる ◦ OSSのライブラリのコードも「読める、読めるぞぉ」になる ◦ 突然新しい問題を思いつくようになる • 量が質に転化する • Type Challengesに限らずOSSに貢献するといいことがある (かもしれない ) • 自分が会ってみたい人がいる場所があれば、是非会いに行こう