1.Readonly:
源码:
type Readonly<T> = { readonly [P in keyof T]: T[P]; };
作用:
生成一个新类型,T中的K属性是只读的,K属性是不可修改的
用法:
interface UserInfo { name:string; age:number; } // 这里会将 UserInfo 所有的属性变为可选 const foo:Partial<UserInfo> = { name:"张三" }
2.Partia: 将一个类型的属性全部变为可选的
源码:
type Required<T> = { [P in keyof T]-?: T[P]; };
作用:
使用时需要传入一个泛型T。内部遍历T的所有属性然后创建一个新的 Type,新的Type的所有属性使用 ? 标识,使之为可选。
用法:
interface UserInfo { name?:string; age?:number; } // 这里会将 UserInfo 所有可选的属性变为必选 const foo:Required<UserInfo> = { name:"张三", age:18 }
3.Required: 将一个类型的属性全部变为必选
源码:
type Required<T> = { [P in keyof T]-?: T[P]; };
作用:
和Partial刚好是相反的。 从上面的代码中可以看出来该Type实用时需要传入一个泛型T。内部使用-?将T的每个属性去除可选标识使之变成为必填。
用法:
interface UserInfo { name?:string; age?:number; } // 这里会将 UserInfo 所有可选的属性变为必选 const foo:Required<UserInfo> = { name:"张三", age:18 }