《七》TypeScript 中的映射类型

有时候,一个类型需要基于另外一个类型,但是又不想手动拷贝一份,此时就可以使用映射类型。

映射类型必须使用 type 来定义,不能使用 interface。可以把映射类型想象成是一个函数,调用它之后就会拷贝出来一份类型。

// 1. 定义一个类型
type PersonType = {
  name: string,
  age: number,
}

// 2. 定义映射类型
// 使用 type 定义一个映射类型的名称,然后通过泛型接收一个类型,使其等于一个对象类型
type MapType = {
  // 基于索引签名。通过  keyof Type 拿到 Type 中的每个 key,然后依次作用一次,其实就相当于遍历了一次
  [property in keyof Type]: Type[property]

  // 其实就相当于:
  // name: PersonType['name'] --> string,
  // age:  PersonType['age'] --> number,
}

// 3. 调用映射类型拷贝出来一份类型
type newPersonType = MapType

《七》TypeScript 中的映射类型_第1张图片

映射类型的修饰符:

  1. ?:用于设置属性可选。
  2. readonly:用于设置属性只读。

拷贝的过程中可以使用修饰符对原来的类型进行转变。修饰符的前面还可以加 + 或者 - 的符号来表示添加或者删除修饰符,默认是 +

type PersonType = {
  name: string,
  age: number,
}

type MapType = {
  // 添加 ? 修饰符使得拷贝后的所有属性都变成可选属性
  [property in keyof Type]?: Type[property]

  // 就相当于是:
  // [property in keyof Type]+?: Type[property]
}

type newPersonType = MapType

《七》TypeScript 中的映射类型_第2张图片

你可能感兴趣的:(TypeScript,TypeScript)