1.Readonly:
源码:
type Readonly<T> = {
readonly [P in keyof T]: T[P];
};
作用:
生成一个新类型,T中的K属性是只读的,K属性是不可修改的
用法:
interface UserInfo {
name?:string;
age?:number;
}
const foo:Readonly<UserInfo> = {
name:"张三",
age:18
}
foo.name = '李四';// error: 无法分配到 "name" ,因为它是只读属性
2.Partia: 将一个类型的属性全部变为可选的
源码:
type Partial<T> = {
[P in keyof T]?: T[P];
};
作用:
使用时需要传入一个泛型T。内部遍历T的所有属性然后创建一个新的 Type,新的Type的所有属性使用 ? 标识,使之为可选。
用法:
interface UserInfo {
name:string;
age:number;
}
// 这里会将 UserInfo 所有的属性变为可选
const foo:Partial<UserInfo> = {
name:"张三"
}
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
}