基本
type A = 1|2|3
type B = {
    //type Aの値をキーに、stringに対応付け(マッピング)
    [Key in A]: string
}
//Bは以下のようになる
// {
//     1:string
//     2:string
//     3:string
// }
let obj:B = {
    1:"",
    2:"",
    3:""
}応用
ルックアップ型と組み合わせると、どの値の型がどのキーの名前に対応するかを制約できます。
以下は User型をマッピングして、それぞれの制約を加えています。
type User = {
    id: number
    name: string
    notes: string[]
}すべてのフィールドを省略可能にする
type Optional = {
    [K in keyof User]?: User[K]
}
// 上記は以下のようになる
// type Optional = {
//     [K in 'id' | 'name' | 'notes']?: User[K]
// }
// ▼
// ▼
// type Optional = {
//     id?: User['id']
//     name?: User['name']
//     notes?: User['notes']
// }
// ▼
// ▼
// type Optional = {
//     id?: number
//     name?: string
//     notes?: string[]
// }
// 全てoptionになる
let a: Optional = {} //okすべてのフィールドを null 許容にする
type Nullable = {
    [K in keyof User]: User[K] | null
}
//ok
let b: Nullable = {
    id: 10,
    name: "itou",
    notes: [""]
}
//ok
let b2: Nullable = {
    id: null,
    name: null,
    notes: null
}すべてのフィールドを読み取り専用にする
type Readonlys = {
    readonly [K in keyof User]: User[K]
}
let c: Readonlys = {
    id: 10,
    name: "itou",
    notes: [""]
}
c.id = 20 //エラー
c.isEmployee = 'suzuki' //エラー
c.notes[0] = "" //エラー組み込みのマップ型
TypeScript あらかじめ組み込まれているマップ型です。
Record < Keys, Values >
Keys 型のキーとValues 型の値を持つオブジェクト。
Partial < Object >
Object 内のすべてのフィールドを省略可能と指定します。
Required < Object >
Object 内のすべてのフィールドを必須(省略不可)と指定します。
Readonly < Object >
Object 内のすべてのフィールドを読み取り専用と指定します。
Pick < Object, Keys >
指定された Keys だけを持つ、Object のサブタイプを返します。















 
  
  
  
  
  
  
  
 









 
 