配列の要素の型を取り出すUtility Type
定義
code:memo.ts
type UnArray<T> = T extends Array<infer A> | ReadonlyArray<infer A> ? A : never;
type T1 = UnArray<string[]>;
// ^? string
type T2 = UnArray<number[][]>;
// ^? number[]
type T3 = UnArray<UnArray<number[][]>>;
// ^? number
type T4 = UnArray<Array<string>>;
// ^? string
解説
infer Aで配列の要素の型を推論させて、与えられたTが配列であるときにその要素を返している。
Indexed Access Typesによる別解
code:memo.ts
// ^? string
// ^? number[]
// ^? number
type T24 = Array<string>number; // ^? string