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

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

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

TSKaigi 2025の登壇資料です。

Avatar for Kanon

Kanon

May 24, 2025

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に貢献するといいことがある (かもしれない ) • 自分が会ってみたい人がいる場所があれば、是非会いに行こう