typescript 什么是Map类型,它有什么用处?

wtlkbnrh  于 2023-03-31  发布在  TypeScript
关注(0)|答案(1)|浏览(119)

它是如何工作的?我应该什么时候使用它?

oknrviil

oknrviil1#

Typescript mapped types

在Typescript中,我们有时想基于其他类型构建类型。Map类型允许我们以一种非常简洁的方式基于现有类型生成新类型,这使我们坚持***不要重复自己***原则

自定义属性:
*问题:我们事先并不知道对象类型的所有属性
*溶液:我们可以使用以下语法声明自定义属性并键入它们:

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

const conforms: customProperties = {
  str: 'foo',
  bool: true,
  // int: 123 > Error Type 'number' is not assignable to type 'string | boolean'.
};

Map类型:
*问题:我们希望一个对象类型基于另一个类型,我们不希望在每个类型中定义所有属性
*溶液:我们可以使用以下语法声明自定义属性并键入它们:

type Person = {
  name: string;
  age: string;
};

// Demo only >> TS has a builtin Readonly, use that
type myReadonly<Type> = {
  readonly [Property in keyof Type]: Type[Property];
};

// Demo only >> TS has a builtin Partial, use that
type myPartial<Type> = {
  [Property in keyof Type]?: Type[Property];
};

type ReadonlyPerson = myReadonly<Person>
type PartialPerson  = myPartial<Person>

请注意,Map类型使用自定义属性的语法[]: type。自定义属性和Map类型之间的区别如下:

  • Map类型使用泛型和[Property in keyof Type]语法迭代现有类型的属性。它将现有类型的所有属性Map到新类型,您可以根据需要自定义新类型。
  • 自定义属性允许你输入你事先不知道的对象属性。当我们不知道对象的确切外观时,这很有用。对象可以输入在编写代码时不知道的属性。

相关问题