Mapped Types
その後のversionでも拡張が加えられている
型レベル関数
用語など
{ [P in K]: T }
と書いた場合に
P
parameter type
unionである K
の1つ1つに対し、propertyを作る感じになる
P
は、ここで定義される型変数
:
の右側で使用できる
e.g. { [P in K]: T[P] }
K
constraint type
以下を満たす必要がある
string | number | symbol
の部分型である
1個以上のunion型である
T
template type
type Element<P extends K> = T;
と似ている
関連
?
や readonly
の付与や除去をする
関連2
参考
T[K]
K
は、 K extends keyof T
を満たしている必要がある
TypeScripttype Person = { name: string; age: number; };
type A = Person['name']; // string
symbolを使った例
tsconst S = Symbol('S');
// { hoge: number, [S]: number }
type A = Record<'hoge' | typeof S, number>;
ts// { hoge: number, [x: symbol]: number }
type A = Record<'hoge' | symbol, number>;
tsconst S = Symbol('S');
// { hoge: number, [s: symbol]: number }
type A = Record<'hoge' | typeof S | symbol, number>;