generated at
Mapped Types
TypeScript v2.1で追加された
その後の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 を満たしている必要がある
TypeScript
type Person = { name: string; age: number; }; type A = Person['name']; // string




symbolを使った例
ts
const 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>;
ts
const S = Symbol('S'); // { hoge: number, [s: symbol]: number } type A = Record<'hoge' | typeof S | symbol, number>;





なにが有益なのかわからん #??