[TypeScript]Conditional Typesを理解する

Conditional TypesTypeScript2.8から導入された機能です。
これを使用することで、型を条件で選択することが可能です。
早速見ていきましょう

Conditional Typesの例

Conditional Typesでは以下の通り、三項演算子および継承を利用して、型定義を判定します。
以下の例では、Utrueを指定すると、string、それ以外だとnumberとなります。

type stringOrNumber<U> = U extends true ? string : number

type s = stringOrNumber<true> // string
type n = stringOrNumber<false> // number

Conditional Typesの基本形

先程の例で、三項演算子、継承を含めた形で説明しました。
このため、基本的な形は以下になります。

type ConditionalTypes<C, P, T1, T2> = C extends P ? T1 : T2
  • Cを子供
  • Pを親
  • T1を継承可能な場合の型
  • T2を継承不可能な場合の型

としています。

Conditional Typesの応用例

Conditional Typestypescriptの様々な箇所で応用されています。
例えば、組み込み型のExcludeは以下の通り、定義されています。

type Exclude<T, U> = T extends U ? never : T

これは、Tに指定した型がUから継承可能な場合はnever、そうでない場合はTを返す型になります。
すなわち、継承可能だった場合はそれを除外するみたいなことが可能です。

まとめ

Conditional Typesは最初とっつきくいと思いますが、基本形を理解して使えば、必ず理解できるようになります。

複雑な定義でもまずはこの基本形を覚えて、少しずつ理解していきましょう。

コメント