最近TypeScriptを使うようになったので備忘録。
下記のメタ関数はarray.flatmap()と似ており、ネストしたオブジェクトの中からobjectを全て取り出す。
type ReomoveArray<T> = T extends unknown[] ? T[number] : T;
type ExtractObject<T> = Extract<ReomoveArray<T>, object>;
type Pack<T> = (x: T) => void;
export type FlatObject<T> = T extends object
? Pack<T> | FlatObject<ExtractObject<T[keyof T]>>
: never;
上記の内容でメタ関数を作成できる。
使い方は以下の通り。
export interface Person {
name: string;
age: number;
}
export interface Family {
member: Person[];
address: string;
}
//FlatObject<Family> と書いた場合、それはPack<Family> | Pack<Person>になる。
本当は[Family,Person]が欲しかったのだが、複雑そうなので取りやめ。
タプルで取得する方法自体は存在するので、時間がある時に再チャレンジするかもしれない。