TypeScriptで疑似コードに型付け
型の検証は実行を伴わないので、実行するコードがない疑似コードであっても型の整合性があるかどうか検証できる
「とりあえずStateってものがあるんだ」を表現する
Stateを"State"というリテラルタイプにしている
なぜか
TypeScriptは
構造的型付けなので適当に空オブジェクトなどにしてしまうと、適切でない代入をしてもエラーにならないため
tstype State = {};
type Other = {};
(x: State) => {
const y: Other = x; // エラーにならない
}
「MutexはState型の値を持っている」を表現する
tstype Mutex = {
state: State,
};
「Stateまたはnull」を表現する
tstype Mutex = {
state: State | null,
};
「Stateを取ってStateを返す関数updateStateがある」
tslet updateState: (state: State) => State;
ここでは関数の型の宣言だけをして、関数の実装を定義はしていない。
letは宣言のタイミングで値を持たなくてもOKなのを利用している。
tslet foo: (arg: ArgType) => RetType
実装をするとこう書き換わる
tsconst foo = (arg: ArgType): RetType => { ... }
tstype Foo = "Foo";
const createFoo = (): Foo => {
// ...
return "Foo";
}
「T型のリストで、最低2個ある」