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

TypeScriptの型だけでオセロを完全実装する ── 型は"仕様"をどこまで語れるか

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for forcia forcia
May 21, 2026
30

TypeScriptの型だけでオセロを完全実装する ── 型は"仕様"をどこまで語れるか

Avatar for forcia

forcia

May 21, 2026

Transcript

  1. 5 type TravelReservation = { reservationId: string; status: | "pending"

    | "confirmed" | "waitlisted" | "cancelled"; confirmedAt?: Date; cancelledAt?: Date; waitlistPosition?: number; }; 複数の状態が重なり合う型 status: “confirmed”なら confirmedAtは必ず存在するはず …だが型だけ見てもわからない “仕様”を正確に表さない型
  2. オセロ型の紹介 ~Play型~ 10 type G1 = Play<"e6">; // G2: f4

    - e4の黒を挟んで裏返し、 4行目を白で横に支配する type G2 = Play<"f4", G1>; type G3 = Play<"f4", G2>; 型 '"f4"' は制約 '"c3" | "d3" | "e3" | "f3" | "g3"' を満たしていません。 次の手番と今の盤面を渡すと盤面が進む “合法手”でなければエラーになる
  3. オセロ型の紹介 ~View型~ 11 expectTypeOf<V10>().toEqualTypeOf<{ cols: " abcdefgh"; row1: "1|--------|"; row2:

    "2|--------|"; row3: "3|---XO---|"; row4: "4|--OXOO--|"; row5: "5|--XXOX--|"; row6: "6|---XO---|"; row7: "7|---X-O--|"; row8: "8|--------|"; }>(); 今の盤面を視覚化する型
  4. AIに「これはどんな型?」を調査させた モデル: Claude Opus 4.7 渡した情報は以下のみ 16 import type {

    SecretType } from "./src"; 型名も含めてあらゆる情報がない状態から どのような型か推測できるか?
  5. EOF