在 TypeScript 中,infer
关键字用于推断类型变量。它通常与条件类型(Conditional Types)一起使用,用于从条件类型中提取并推断出类型。
条件类型是一种非常强大的类型操作工具,可以根据给定的条件选择不同的类型。而 infer
关键字允许我们在条件类型中引入新的类型变量,并对其进行推断。
以下是一个示例来说明 infer
的作用:
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;
在这个示例中,我们定义了一个条件类型 ReturnType
,它接受一个函数类型 T
作为输入参数。通过 T extends (...args: any[]) => infer R
这一条件判断,我们在条件类型中引入了一个新的类型变量 R
,并使用 infer
关键字进行推断。
T extends (...args: any[]) => infer R
表示如果 T
是一个函数类型,那么就将其返回值类型推断为 R
类型。否则,返回 any
类型作为默认类型。
通过这个条件类型,我们可以实现一个工具类型,用于获取函数的返回值类型:
function sum(a: number, b: number): number { return a + b; } type Result = ReturnType<typeof sum>; // number
在这个例子中,我们使用 ReturnType<typeof sum>
来获取函数 sum
的返回值类型。由于 sum
是一个函数类型,因此 ReturnType
条件类型中的 infer R
将会推断为 number
类型,最终得到 Result
类型为 number
。
总之,infer
关键字在 TypeScript 的条件类型中扮演着重要的角色,用于推断类型变量,并根据推断结果进行类型操作和转换。它使得我们可以编写更加灵活和可复用的类型工具。