問題
条件値`C`、 `C`が truthy である場合の戻り値の型`T`、`C`が falsy である場合の戻り値の型`F`を受け取る`If`を実装します。
条件値`C` は`true`か`false`のどちらかであることが期待されますが、`T` と `F` は任意の型をとることができます。
例えば:
```ts
type A = If<true, 'a', 'b'>; // expected to be 'a'
type B = If<false, 'a', 'b'>; // expected to be 'b'
```
回答
type If<C extends boolean, T, F> = C extends true ? T : F;
ちょっと解説
-
C extends boolean,
C(ジェネリクスの第一引数)がbooleanでない場合エラーを出したいためこう書きます。 -
C extends true ? T : F
条件付き型 (conditional type)です。
C(ジェネリクスの第一引数)がtrueである場合T
を、そうでない場合F
を返します。
今回の場合C
はC extends boolean
と書かれており、booleanであることは確実なのでtrueならT
、falseならF
を返す形になります。