一、条件类型
通过条件判断,返回指定的类型
type MyType<T> = T extends string? string : any
type t1 = MyType<number>
二、分布式条件类型
判断的类型为联合类型时。
type MyType<T> = T extends any? T : any
type t1 = MyType<number|string|boolean>
- 分布式条件类型的用途
例如,将联合类型T中的U类型进行删除
type MyType<T, U> = T extends U? never : T
type t1 = MyType<number|string|boolean, string>
- 排除某一类型的缩写
type t1 = Exclude<number|string|boolean, string>
- 只用某一类型的缩写
type t2 = Extract<number|string|boolean, string>
- 去除null和undefined类型的缩写
type t3 = NonNullable<number|null|undefined|string|boolean>
- 将函数返回值作为类型
type t4 = ReturnType<(()=>string)>
- 将类的参数作为元组类型返回
class Person {
constructor(age:number, name:string) {
}
}
type t5 = ConstructorParameters<typeof Person> //元组类型
- 将函数的参数作为元组类型返回
function say (age:number, name:string) {
}
type t6 = Parameters<typeof say> //元组类型
三、infer关键字
可以将条件类型作为新的类型返回
- 如果传入的数组类型,那么返回的数组参数中的类型
- 如果传入的是类型,那么返回就是类型
type Mytype<T> = T extends any[]? T[number] : T
type t3 = Mytype<number[]>
type t4 = Mytype<string>
type Mytype<T> = T extends Array<infer U>? U : T
type t3 = Mytype<any[]>
type t4 = Mytype<boolean>