[infer P, ... infer _]中infer P获取的是第一个元素的类型,而...infer _获取的是数组其他剩余元素的数组类型;
!!!特别说明下,我们例子汇总不需要使用其他元素的类型,所以用_。
示例:
//定义
type InferFirst
//示例
type result = InferFirst<[3, 2, 1]>; // 3
🐹 推断数组(或者元组)最后一个元素的类型
定义:
type InferLast
这个 和 推断数组第一个元素的类型 类似,...infer _获取的是最后一个元素之前的所有元素类型,infer Last获取的是最后一个元素的类型。
示例:
//定义
type InferLast
//示例
type result = InferLast<[3, 2, 1]> // 1
2. 函数
🐹 推断函数类型的参数
定义:
type InferParameters
...args 代表的是函数参数组成的元组, infer R代表的就是推断出来的这个函数参数组成的元组的类型。
TS 已内置,名字叫Parameters
示例:
//定义
type InferParameters
//示例
type result = InferParameters<((arg1: string, arg2: number) => void)>; // [string, number]
🐹 推断函数类型的返回值
定义:
type InferReturnType
和前面的推断函数类型的参数类似,=> 后面的infer R代表的就是推断出来的函数的返回值类型。
TS 已内置,名字叫ReturnType
示例:
//定义
type InferReturnType
//示例
type result = InferReturnType<() => string>; // string
🐹 推断函数类型的构造函数参数类型
定义:
type InferConstructor
我们想获取构造函数的参数类型,是不是只要把infer P标注在构造函数参数的位置就可。这个可以参考推断函数参数去理解
TS 已内置,名字叫ConstructorParameters
示例:
//定义
type InferConstructor
//示例
class People {
name: string;
constructor(name: string) {
this.name = name
}
}
//定义类型
type result = InferConstructor
🐹 4. 推断函数类型的实例类型(InstanceType)
定义:
type InferInstanceType
我们想获取构造函数People的实例类型,这个可以参考函数推断返回值去理解。
TS 已内置,名字叫InstanceType
示例:
//定义类型
type InferInstanceType
//示例
class People {
name: string;
constructor(name: string) {
this.name = name
}
}
type result = InferInstanceType
🐹 5. 获取this参数的类型(ThisParameterType)
定义:
type InferFuncThisType
TS 已内置,名字叫ThisParameterType
示例:
// 定义
type InferFuncThisType
//示例
function fn1(this: { name: string; age: number }) {
this.name = "Type-Infer";
this.age = 13;
}
type result = InferFuncThisType
3. Promise
🐹 推断Promise成功值的类型
定义:
type InferPromise
示例:
//定义
type InferPromise
//示例
type result = InferPromise
4. 模板类型
🐹 推断字符串字面量类型的第一个字符对应的字面量类型
定义:
type InferString
示例:
//定义
type InferString
//示例
type result = InferString<"Johnny">; // J
🐹 去除字符串前面的所有空格
定义: