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到新类型,您可以根据需要自定义新类型。
1条答案
按热度按时间oknrviil1#
Typescript mapped types:
在Typescript中,我们有时想基于其他类型构建类型。Map类型允许我们以一种非常简洁的方式基于现有类型生成新类型,这使我们坚持***不要重复自己***原则
自定义属性:
*问题:我们事先并不知道对象类型的所有属性
*溶液:我们可以使用以下语法声明自定义属性并键入它们:
Map类型:
*问题:我们希望一个对象类型基于另一个类型,我们不希望在每个类型中定义所有属性
*溶液:我们可以使用以下语法声明自定义属性并键入它们:
请注意,Map类型使用自定义属性的语法
[]: type
。自定义属性和Map类型之间的区别如下:[Property in keyof Type]
语法迭代现有类型的属性。它将现有类型的所有属性Map到新类型,您可以根据需要自定义新类型。