Typescript提供了几种不同属性名称的映射类型,包括Partial、Readonly、Pick和Record。 Partial类型:Partial类型可以将给定类型的所有属性设置为可选。这对于需要将某些属性设置为可选的情况非常有用。例如,如果有一个接口Person,包含name和age属性,可以使用Partial<Person>来创建一个新类型,其中name和age属性都是可选的。
type Coord = Partial<Record<'x' | 'y', number>>; // 等同于 type Coord = { x?: number; y?: number; } Readonly 不管是从字面意思,还是定义上都很好理解:将所有属性定义为自读。 type Coord = Readonly<Record<'x' | 'y', number>>; // 等同于 type Coord = { readonly x: number...
在TypeScript中,有四种主要的映射类型:Partial、Readonly、Record和Pick。 Partial:Partial类型可以将给定类型的所有属性设置为可选属性。这意味着我们可以创建一个新类型,其中所有属性都是可选的,可以根据需求选择性地设置或不设置属性。 应用场景:当我们需要创建一个只有部分属性必填的对象时,可以使用Partial类型。例如...
typeperson4 = Readonly<Person>; // person4 === { // readonly name: string; // readonly age?: number; // } Pick 源码: typePick<T,KextendskeyofT>= { [PinK]:T[P]; }; 实例: typeperson5 = Pick<Person,"name">; // person5 === {name: string} Record 源码: typeRecord<Kexte...
type person4 = Readonly<Person>; // person4 === { // readonly name: string; // readonly age?: number; // } Pick 源码: type Pick<T, K extends keyof T> = { [P in K]: T[P]; }; 实例: type person5 = Pick<Person, "name">; // person5 === {name: string} Record 源...
type Readonly<T> = { readonly [P in keyof T]: T[P];}; 实例: type person4=Readonly<Person>;//person4==={//readonly name:string;//readonly age?:number;//} Pick 源码: typePick<T,K extends keyof T>={[PinK]:T[P];}; ...
源码定义 Record 以 typeof 格式快速创建一个类型,此类型包含一组指定的属性且都是必填。 Partial 将类型定义的所有属性都修改为可选。 Readonly 不...
classResult<Properties = Record<string,any>> {constructor(publicreadonly properties: Record<keyof Properties,Properties[keyof Properties]>) {}} Result类看起来有点复杂。在这个例子中,我们将其声明为一个泛型类型,其中类型参数Properties默认为Record<string, any>。
Readonly,Partial和Pick是同态的,但Record不是。因为Record并不需要输入类型来拷贝属性,所以它不属于同态:type ThreeStringProps = Record<'prop1' | 'prop2' | 'prop3', string> 非同态类型本质上会创建新的属性,因此它们不会从它处拷贝属性修饰符。
使用Readonly 即可: constuser = {username:"awesomeuser",gender:"male",age:19,bio:"Aha, insight~",}; constsharedUser = userasReadonly<User>; sharedUser.username ="new Name"; 此时,IDE 就会告诉你无法分配到 "username" ,因为它是只读属...