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

高度な型付け、どう教える?

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Shunsuke Mano Shunsuke Mano
May 22, 2025
2.6k

 高度な型付け、どう教える?

Avatar for Shunsuke Mano

Shunsuke Mano

May 22, 2025
Tweet

Transcript

  1. Name: 眞野 隼 輔 ま の しゅんすけ   

    @progfay ・ Web Frontend Engineer ・ 普段は Web の動向を追っかけている ɾ型パズルは独学で習得 🧩
  2. ・ 以下などを組み合わせて型を作ること ɾGenerics: Hoge<T> ɾConditional Types: T extends U ?

    A : B ɾMapped Types: { [K in keyof T]: string } ɾRecursive Types ・ 特に「理解や実装が難しいもの」を指す 高 度な型付け とは
  3. 1 . 書き 手 が処理の流れをイメージしづらい • 初 手 で型レベルプログラミングの 心

    理的 ・ 技術的ハードルが 高 い 2 . debug がしづらい • 一 時変数や console.log が使えない 3 . TypeScript の挙動に癖がある • Distributive Conditional Types • (() => {}) extends Record<any, any> ? true : never 高 度な型付けの課題
  4. • JS ⁶ TS は完全には対応しない • optional property や readonly,

    Union は JS でどう表現する? • 生 徒が困らないよう、教師が場を整えてあげる必要がある • TypeScript 特有の癖はそのまま • JS → TS に変換したら謎の挙動になることもある • 体当たりで学ぶ or TypeScript ͷ࢓༷ΛֶͿඞཁ͕͋Δ 「翻訳」の注意点
  5. 1 . JavaScript で「下書き」 2 . TypeScript に「翻訳」 3 .

    意図通りの型付けができているか確認する 4 . 上 手 くいくまで 1 ~ 3 を繰り返す 高 度な型付けの流れ
  6. Function は Record の sub type → Mapped Types に

    入 れると {} になる TypeScript 特有の癖
  7. • 対象: 高 度な型付けに馴染みのないエンジニア 3 名 • 形式: ペアプロ形式で DeepReadonly<T>

    を書く • 結果: 20 分ほどで書けた! • 感想: • 従来の課題だった「最初から型レベルプログラミング」が解消されていた! • 再帰処理の実装は不慣れだったが、debug しながらだったので何とか書けた • この形式で何度か経験を積めば、書けるようになるかも? 実践してみた
  8. • string literal (property が 生 やせない) • "str" •

    String("str") • String object (property が 生 やせる!) • new String("str") 👎 学びやすい Helper 関数を 用 意するのが難しい
  9. • 良いところ👍 • 慣れ親しんだ 言 語で書き始められる • debug できる •

    「下書き」に戻って考え直せる • 悪いところ👎 • 学びやすい Helper を 用 意するのが難しい • JS → TS の変換が 自 明ではない • TypeScript 特有の癖は残る } 生 徒が学びやすくなる } 教師の下準備や教え 方 が難しい
  10. 下準備を AI にやらせてみた • DeepReadonly<T> で one-shot prompting • PickByType<T,

    U> を JavaScript の「下書き」に 変換してもらった
  11. • 問題: 高 度な型付けは処理の流れがイメージしづらく、 debug もしづらい • 提案:   で「下書き」→

      に「翻訳」 • 実演: DeepReadonly<T> を例に教え 方 の流れを説明した • 評価: 教師の下準備の難易度が 高 いが、 生 徒は 比 較的学びやすい • 展望: AI に下準備をさせることで、教師の負担を減らせそう! • 今後: 現場で 高 度な型付けが必要になったら、またこの 手 法使ってみる予定 まとめ
  12. • Deep Readonly · type-challenges/type-challenges - GitHub • DeepReadonly<T> を教えるサンプルプログラム

    - TypeScript Playground • AI に TS の「型定義」→ JS の「下書き」変換をさせる - Gemini リンク集