interface PItf{
name: string
age: number
height?: number
}
Partial
可选属性
export {}
// 比如我们在定义变量时使用了PItf接口类型,但是不需要其中的某些属性,就可以使用Partial,而不用使用可选操作符(?:)或者重新定义
// 如
type optional = Partial<PItf>
// 相当于
type optional = {
name?: string | undefined
age?: number | undefined
height?: number | undefined
}
let obj:Partial<PItf> = {
name: 'zs'
}
释意:adj.局部的
// 底层原理
type Partial<T> = {[p in keyof T] ?: T[p]|undefined;}
// <==>等价于
keyof T <==> 'name' | 'age'
type Partial<T> = {
name?:string|undefined
age?:number|undefined
}
Required
必选属性
// 与Partial 相反,必需包含接口中所有的属性,即使有可选操作符,即不可缺省
let obj2:Required<PItf> = {
name: 'zs',
age: 18,
height: 180
}
释意:adj.必要的、必需的
// 底层原理
type Required<T> = {[p in keyof T] -?: T[p];}
// -?号 抵消,去掉这个?号
// <==>等价于
keyof T <==> name | age
type Required<T> = {
name: string
age: number
height: number
}
Pick
部分选择,从一个已声明的类型中抽取出一个子类型,在子类型中包含父类型中的部分或全部属性
let objPick: Pick<PItf, 'name' | 'age'> = {
name: 'zx',
age: 18
}
Omit
属性忽略,与Pick相反,用于忽略掉一些我们不需要的属性
let objOmit: Omit<PItf, 'age'> = {
name: 'zx'
}
Readonly
只读属性(只读的约束存在于第一次给对象赋值的时候,而不是第一次给只读属性赋值的时候)
interface PItf {
readonly id: number;
name: string;
}
let oly: PItf = {
id: 89768,
name: 'ls'
}