配列から配列への型レベルmap
配列を取って、計算して、配列を返す型
hsのような言語で考えるなら、再帰関数を想像するがぜんぜん異なるmrsekut.icon
TSの難しいポイントの1つだと思う
イディオムとして頭に入っていないと使えない
[a,b,c]→[f a, f b, f c]と変換する
こんなふうに書く
code:ts
type Hoge<XS extends unknown[]> = {
};
Fは何かしらの、適用したい型関数
この[P in keyof T]: ..というイディオムは、recordに対して使われているのはよく見るmrsekut.icon
例えば、PartialとかRequiredとかReadonlyとか
これを配列に使う
例
numberの配列を、stringの配列に変換する
code:ts
type Nums2Strs<T extends number[]> = {
};
// 関数
type Num2Str<N> = N extends number ? ${N} : never;
// 結果
例
型関数の重ね具合に依って、普通に書くとerrorになるケースが存在する
code:ts
type Box<V = unknown> = { value: V };
type Unbox<B extends Box> = B'value'; type UnboxAll<T extends Box[]> = {
};
ちなみに、Map<F, XS>のような高階型関数は定義できない
高階多相型がないので
型引数Fは、何かしらの型関数であって欲しいが、それが定義できない
頑張る方法はあるっぽい