# 工具类
# Partial
将数据转换为可缺省
interface Person {
name: string
age: number
}
const p: Partial<Person> = {}
// 工具类通过泛型转换
type Partial<T> = {
[P in keyof T]?: T[P] | undefined
}
// 最终转换为
type interFace = {
name?: string,
age?: number
}
# Record
const obj: Record<string, number> = {}
// 类似于
type Record <K, T> = {
[P in K]: T
}
# Pick
取当前类型里的指定类型
type User = {
id: number
name: string
age: number
}
type PickedUser = Pick<User, 'id' | 'name'>
type Pick<T, K extends keyof T> = {
[P in T]: T[P]
}
// PickedUser = { id: number, name: string }
# Omit
剔除当前类型中的某个类型
type Omit<T, K extends string | number | symbol> = {
[P in Exclude<keyof T, K>]: T[P]
}
interface Person {
name: string
id: number
}
type P = Omit(Person, 'id') // { name: string }
# Exclude
type A = Exculde<'id' | 'age' | 'sex', 'id'> // 'age' | 'sex'
type Ecclude<T extends string | number | symbol, U extends string | number | symbol> = {
T extedns U ? never : T
}
# Extract
type A = Exculde<'id' | 'age' | 'sex', 'id'> // 'id'
type Ecclude<T extends string | number | symbol, U extends string | number | symbol> = {
T extedns U ? T : never
}
# InstanceType
type MyInstanceType<T> = T extends new (...args: any[]) => infer P ? P : never
type A = MyinstanceType<Person> // Person 实例
# Parameters
type MyParameters<T> = T extends (..args: infer P) => any ? P : never
type F = MyParameters<(a: number, b: string) => any> // [number, string]
# ReturnType
type MyReturnType<T> = T extends (..args: any[]) => infer P ? P : never
type R = MyReturnType<() => string> // string