条件类型概述
条件类型是 TypeScript 中的一种高级类型工具,用于根据给定类型是否满足某个条件来返回不同的类型。它可以根据一个布尔类型的结果在两个分支之间进行选择,从而返回不同的类型。 写法: 传入类型 extends 指定条件类型。这样使得传入的类型满足指定的条件类型。
类型推断infer
表示当某个类型可以被赋值给变量时,该变量将会成为何种类型。 我们看以下例子:
定义了一个函数类型并实现, 怎么获取它的返回值类型呢?
type fooTypep = (num1: number, num2: number) => number
const foo: fooTypep = (num1: number, num2: number) => {
return num1 + num2
}
一、使用内置工具获取函数返回值的类型:
type fnReturnType = ReturnType<fooTypep>
二、使用条件类型配合infer获取函数返回值类型
通过infer R 声明了一个类型变量R, 出现的位置正好就是函数返回值的位置, 也就是说把它赋值为函数类型的返回值的类型。最后通过三元运算符把R赋值给type 声明的类型别名。
type getReturnType<T extends (...args: any[]) => any> = T extends (...args: any[]) => infer R? R: never
type fnReturnType1 = getReturnType<fooTypep>
分发条件
分发条件类型是 TypeScript 中的一种高级类型工具,可以根据输入的联合类型对每一个成员进行处理,并将处理结果组合为新的联合类型。在许多类型转换和操作场景中,分发条件类型非常有用。
此时arrType的类型是string[] | number[], 而不是string | number []
type distributeType<T> = T extends any? T[]: never
type arrType = distributeType<string | number>