NISHIO Hirokazu[Translate]
TypeScriptで疑似コードに型付け
型の検証は実行を伴わないので、実行するコードがない疑似コードであっても型の整合性があるかどうか検証できる

「とりあえずStateってものがあるんだ」を表現する
ts
type State = "State"
Stateを"State"というリテラルタイプにしている
なぜか
TypeScriptは構造的型付けなので適当に空オブジェクトなどにしてしまうと、適切でない代入をしてもエラーにならないため
ts
type State = {}; type Other = {}; (x: State) => { const y: Other = x; // エラーにならない }

「MutexはState型の値を持っている」を表現する
ts
type Mutex = { state: State, };

「Stateまたはnull」を表現する
ts
type Mutex = { state: State | null, };

「Stateを取ってStateを返す関数updateStateがある」
ts
let updateState: (state: State) => State;
ここでは関数の型の宣言だけをして、関数の実装を定義はしていない。
letは宣言のタイミングで値を持たなくてもOKなのを利用している。

ts
let foo: (arg: ArgType) => RetType
実装をするとこう書き換わる
ts
const foo = (arg: ArgType): RetType => { ... }

ts
type Foo = "Foo"; const createFoo = (): Foo => { // ... return "Foo"; }


「T型のリストで、最低2個ある」
ts
[T, T, ...T[]]


"Engineer's way of creating knowledge" the English version of my book is now available on [Engineer's way of creating knowledge]

(C)NISHIO Hirokazu / Converted from [Scrapbox] at [Edit]