typescript类型问题?

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

这段代码要怎么理解,能否举一个简单直接的例子来说明作用

阅读 1.7k
3 个回答
✓ 已被采纳

这段代码的作用是用来推断函数的返回值类型。

  1. 通过 extendsT 参数进行约束,(...args: any) => any 表示一个函数类型,即 T 参数的类型必须是一个函数类型。
  2. T extends U ? X : Y 是条件类型,其中 T 是泛型参数,U 是条件部分,X 是符合条件的返回结果,Y 是不符合条件的返回结果。
  3. 推断类型 infer 的作用是:在条件类型内部声明一个类型变量。(...args: any) => infer R 是条件类型的条件部分,它声明了一个类型变量 R ,用来存储函数的返回类型。
  4. T extends (...args: any) => infer R ? R : any表示:

    • 如果 T 是函数类型((...args: any) => infer R),则返回 R , 即函数的返回类型。
    • 如果 T 不是函数类型((...args: any) => infer R),则返回 any

推断函数类型的返回值

type a = MyReturnType<() => string>; // string

如果 T 可以赋值给一个函数类型(即 T 是一个函数),则提取该函数的返回值类型并作为MyReturnType<T> 的结果类型。
其中,infer R 是 TypeScript 2.8 引入的一个新的关键字,它可以允许在条件类型中推断出某个类型变量的类型。在这个例子中,infer R 表示我们要从函数类型中提取出它的返回值类型,并将其保存到变量 R 中。

推荐问题
logo
Microsoft
子站问答
访问
宣传栏