返回

类型推导妙用:Infer 带来的灵活性

前端

TypeScript 中的 Infer

在 TypeScript 中,我们可以使用 Infer 关键字来推导出条件类型中的类型。Infer 关键字的语法很简单,它只需要紧跟在条件类型的后面,并用一对尖括号 <> 来包裹。

例如,我们有一个函数 getReturnType(),它可以返回一个函数的返回值类型。我们可以使用 Infer 关键字来推导出 getReturnType() 函数的返回值类型:

type GetReturnType<T extends (...args: any[]) => any> = T extends (...args: any[]) => infer R ? R : never;

这个 GetReturnType 函数的类型签名表示,它可以接收一个函数类型 T 作为参数,并且返回该函数的返回值类型 R

Infer 关键字的妙用

Infer 关键字的妙用在于它可以让我们在条件类型中推导出类型,从而实现各种各样的功能。例如,我们可以使用 Infer 关键字来:

  • 推导出函数的返回值类型:就像我们在上面的例子中看到的,我们可以使用 Infer 关键字来推导出函数的返回值类型。这可以帮助我们更好地理解函数的行为,并编写出更健壮的代码。
  • 推导出类型注解:Infer 关键字也可以用来推导出类型注解。例如,我们可以使用 Infer 关键字来推导出一个变量的类型注解:
let x: Infer<typeof getReturnType(() => 1)>;

这个代码表示,变量 x 的类型是 getReturnType(() => 1) 函数的返回值类型。由于 getReturnType(() => 1) 函数的返回值类型是 number,所以变量 x 的类型也是 number

  • 推导出条件类型:Infer 关键字还可以用来推导出条件类型。例如,我们可以使用 Infer 关键字来推导出一个条件类型,该条件类型表示一个函数是否返回一个 number 类型的值:
type IsNumber<T> = T extends (...args: any[]) => infer R ? R extends number ? true : false : never;

这个 IsNumber 条件类型的类型签名表示,它可以接收一个函数类型 T 作为参数,并返回一个布尔值,表示该函数是否返回一个 number 类型的值。

结语

Infer 关键字是一个非常强大的工具,它可以让我们在条件类型中推导出类型,从而实现各种各样的功能。在本文中,我们介绍了 Infer 关键字的语法和一些妙用。希望您能够通过本文对 Infer 关键字有更深入的了解,并在您的 TypeScript 项目中使用它来编写出更健壮和更易维护的代码。