# 映射类型 (Mapped Types) (opens new window)

映射类型基于索引类型

type OnlyBoolsAndHorses = {
  [key: string]: boolean | Horse;
};

const conforms: OnlyBoolsAndHorses = {
  del: true,
  rodney: false,
};
1
2
3
4
5
6
7
8

映射类型是一种泛型类型,它通过使用keyof创建的并集来遍历一种类型的键来创建另一种类型的键:

type OptionsFlags<Type> = {
  [Property in keyof Type]: boolean;
};


type FeatureFlags = {
  darkMode: () => void;
  newUserProfile: () => void;
};

type FeatureOptions = OptionsFlags<FeatureFlags>;
1
2
3
4
5
6
7
8
9
10
11

# 映射修饰符

  • ?
  • readonly

将readonly属性去掉

// Removes 'readonly' attributes from a type's properties
type CreateMutable<Type> = {
  -readonly [Property in keyof Type]: Type[Property];
};

type LockedAccount = {
  readonly id: string;
  readonly name: string;
};

type UnlockedAccount = CreateMutable<LockedAccount>;

// UnlockedAccount的类型
// type UnlockedAccount = {
//     id: string;
//     name: string;
// }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

将可选属性改为不可选


type Concrete<Type> = {
  [Property in keyof Type]-?: Type[Property];
};

type MaybeUser = {
  id: string;
  name?: string;
  age?: number;
};

type User = Concrete<MaybeUser>;
1
2
3
4
5
6
7
8
9
10
11
12