【发布时间】:2021-02-21 22:59:54
【问题描述】:
我有一个函数identityOrCall,它要么调用给它的函数,要么返回值。 value 是泛型类型。
function identityOrCall <T>(value: T): T {
if (typeof value === 'function')
return value()
else
return value
}
identityOrCall(() => 'x') // -> 'x'
identityOrCall(() => 'x') 行似乎通过了编译器的类型检查。
为什么?不应该报错吗?
如果 identityOrCall 被传递一个函数,我希望泛型类型 T 设置为 Function 并且 identityOrCall 应该返回一个 Function 类型。
相反,我可以将Function 类型作为参数传递,并让identityOrCall 返回string 类型。
这是为什么?这对我来说似乎不一致,但我一定遗漏了一些东西。
【问题讨论】:
-
identityOrCall(() => 'x')不会返回错误(为什么会这样?)在这种情况下,T将是() => string,这是一个有效类型 -
@apokryfos 我的误解是我希望
identityOrCall返回与其参数相同的类型。如果给定Function类型作为参数,我希望它返回Function类型。
标签: typescript types typescript-typings typing