Utility Types
TypeScriptビルトインのユーティリティ型では足りなかったとき用の独自ユーティリティ型
/icons/hr.icon
ElementType
Array<T> から T を取り出すやつ(ビルトインで欲しい)
code:element-type.d.ts
declare type ElementType<T> = T extends (infer U)[] ? U : never;
MatchType
T が U を満たすなら T、そうでないなら V を返す
ユースケース
T がUnion型かつ一部の型が特定のプロパティを持たないとき、そのプロパティを持つ型に絞り込む
code:match-type.d.ts
declare type MatchType<T, U, V = never> = T extends U ? T : V;
code:example.ts
type Item =
| { id: string; value: string }
| { id: string; value: number }
| { id: string };
type ItemWithLabel = MatchType<Item, { label: unknown }>;
// => { id: string; value: string } | { id: string; value: number }