TypeScript系列一工具类型Partial&Required、Pick&Omit、Readonly

91 阅读1分钟
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'
}