ts的一些内置类型
1.Partial 将类型转化成可选属性
interface Person {
name: string;
age: string;
sex: string;
}
type Partial = Partial<Person>
实现原理
type DeepPartial<T> = {
[K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K]
}
type DeepPartialPerson = DeepPartial<Person>;
2.Required 将类型转化成必填属性
interface Person {
name?: string;
age?: string;
sex?: string;
}
type Required = Required<Person>
实现原理 同上
3.Readonly 将类型转化成只读属性
interface Person {
name: string;
age: string;
sex: string;
}
type Readonly = Readonly<Person>
实现原理
type Readonly<T> = { readonly [K in keyof T]: T[K] }
type RequiredPerson = Readonly<Person>
4.Pick 挑选所需属性
interface Person {
name: string;
age: string;
sex: string;
}
type Pick = Pick<Person,'name' | 'age'>
实现原理
type Pick<T, U extends keyof T> = { [P in U]: T[P] }
type PickPerson = Pick<Person, 'name' | 'age'>
5.Record 记录属性
let person: Record<string, any> = { name: 'zf', age: 11 };
实现原理
type Record<K extends keyof any, T> = { [P in K] : T }
let person: Record<string, any> = { name: 'zf', age: 11 };
6.Omit 忽略属性
let person = {
name: 'zhufeng',
age: 11,
address: '回龙观'
}
type OmitAddress = Omit<typeof person, 'address'>
实现原理
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>