type MyReturnType<T> = T extends (...args: any[]) => infer R ? R : never
这段代码要怎么理解,能否举一个简单直接的例子来说明作用
type MyReturnType<T> = T extends (...args: any[]) => infer R ? R : never
这段代码要怎么理解,能否举一个简单直接的例子来说明作用
如果 T
可以赋值给一个函数类型(即 T
是一个函数),则提取该函数的返回值类型并作为MyReturnType<T>
的结果类型。
其中,infer R 是 TypeScript 2.8 引入的一个新的关键字,它可以允许在条件类型中推断出某个类型变量的类型。在这个例子中,infer R 表示我们要从函数类型中提取出它的返回值类型,并将其保存到变量 R 中。
8 回答4.8k 阅读✓ 已解决
6 回答3.6k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
6 回答2.5k 阅读
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
这段代码的作用是用来推断函数的返回值类型。
extends
对T
参数进行约束,(...args: any) => any
表示一个函数类型,即T
参数的类型必须是一个函数类型。T extends U ? X : Y
是条件类型,其中T
是泛型参数,U
是条件部分,X
是符合条件的返回结果,Y
是不符合条件的返回结果。infer
的作用是:在条件类型内部声明一个类型变量。(...args: any) => infer R
是条件类型的条件部分,它声明了一个类型变量R
,用来存储函数的返回类型。T extends (...args: any) => infer R ? R : any
表示:T
是函数类型((...args: any) => infer R
),则返回R
, 即函数的返回类型。T
不是函数类型((...args: any) => infer R
),则返回any
。