Ts类型工具
小于 1 分钟
把类型某些属性变成可选的
- 步骤
- 使用
Omit
把要变成可选的属性剔除,构造一个新的类型; - 使用
Pick
把要变成可选的属性挑选出来,构造从一个新的类型; - 使用
Partial
把第2步中构造出来的新类型变成可选了; - 对第1步和第4步生成的类型进行交叉运算(&);
interface IUserInfo{
name:string,
age:number,
gender:string
}
/**
* 1.Omit(IUserInfo,'age')
* 构造出来的新类型只能传入 name和 gender 属性
* Initial type: {name: string, gender: string}
*/
type SomePartial1=Omit<IUserInfo, 'age'>
/**
* 2.Pick(IUserInfo,'age')
* 构造出来的新类型只能传入 age 属性
* Initial type: {age: number}
*/
type SomePartial2=Pick<IUserInfo, 'age'>
/**
* 3.Partial(SomePartial2,'age')
* 把 2中 的类型所有的属性变成可选的
* Initial type: {age?: number}
*/
type SomePartial3=Partial<SomePartial2>
/**
* 4. 对1和3使用交叉运算
*/
type SomePartial=SomePartial3 & SomePartial1
//ok
const user:SomePartial={
name:'rice',
gender:'man',
}
最后可以使用泛型对 SomePartial<T,K>
进行完善:T
类型接口,K
:要变成可选的属性
// 工具代码
type SomePartial<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>
// 效果
const user: SomePartial<IUserInfo, 'age'|'name'> = {
gender: 'man',
}