Conditional TypesはTypeScript2.8から導入された機能です。
これを使用することで、型を条件で選択することが可能です。
早速見ていきましょう
Conditional Typesの例
Conditional Typesでは以下の通り、三項演算子および継承を利用して、型定義を判定します。
以下の例では、Uにtrueを指定すると、string、それ以外だとnumberとなります。
type stringOrNumber<U> = U extends true ? string : number
type s = stringOrNumber<true> // stringtype n = stringOrNumber<false> // numberConditional Typesの基本形
先程の例で、三項演算子、継承を含めた形で説明しました。
このため、基本的な形は以下になります。
type ConditionalTypes<C, P, T1, T2> = C extends P ? T1 : T2- Cを子供
- Pを親
- T1を継承可能な場合の型
- T2を継承不可能な場合の型
としています。
Conditional Typesの応用例
Conditional Typesはtypescriptの様々な箇所で応用されています。
例えば、組み込み型のExcludeは以下の通り、定義されています。
type Exclude<T, U> = T extends U ? never : Tこれは、Tに指定した型がUから継承可能な場合はnever、そうでない場合はTを返す型になります。
すなわち、継承可能だった場合はそれを除外するみたいなことが可能です。
まとめ
Conditional Typesは最初とっつきくいと思いますが、基本形を理解して使えば、必ず理解できるようになります。
複雑な定義でもまずはこの基本形を覚えて、少しずつ理解していきましょう。