課題

条件 C、真の場合の返り値の型 T、偽の場合の返り値の型 F を受け取る If を 実装してください。Ctrue または false であることが期待されますが、TF はどんな型でも構いません。

例:

type A = If<true, "a", "b">; // expected to be 'a'
type B = If<false, "a", "b">; // expected to be 'b'

解答

TypeScript の Conditional 型を 使用するタイミングは、型に対して if 文を使用する必要がある場合です。まさしくここ で求められていることに合致します。

条件を表わす型が true である場合 true ブランチに、そうでない場合は false ブラ ンチに入ります:

type If<C, T, F> = C extends true ? T : F;

しかしこのままでは、C に割り当てられる型は boolean 型のみであることを示す制約 がないため、コンパイルエラーが発生します。これに対処するため、型変数 Cextends boolean を追加します:

type If<C extends boolean, T, F> = C extends true ? T : F;

参考