TypeScript入門 配列の先頭の要素の型を取得する方法
[string, number] であれば string を、 [boolean, string, string] であれば boolean を返すような型を作ります。
はじめに思いついたのが以下です。
type First<T extends any[]> = T[0]
とてもシンプルなのですがひとつ問題があります。
type T1 = First<[]> // undefined
type T2 = First<[undefined, string]> // undefined
どちらもundefinedになります。
これだと、上のように配列の先頭がundefinedなのか、それとも空配列なのかを判断できません。
そこで、以下のようにします。
type First<T extends any[]> = T[number] extends never ? never : T[0]
補足
いままで知らなかったのですが、以下の二つの型は異なるのですね。
type T1 = [][number] // T1はnever
type T2 = [][0] // T2はundefined
最近のコメント