【发布时间】:2021-05-06 23:52:55
【问题描述】:
您可以在this playground 中查看演示。
我创建了一个简单的泛型类型,它可以表示一个变量或一个返回变量的函数。但是,不幸的是,它不适用于典型的typeof arg === 'function' 检查。它会产生以下错误:
This expression is not callable.
Not all constituents of type '(() => T) | (T & Function)' are callable.
Type 'T & Function' has no call signatures.
有没有办法让它在不使用类型保护功能的情况下工作?
type Initializer<T> = T | (() => T)
function correct(arg: Initializer<string>) {
return typeof arg === 'function' ? arg() : arg
}
function wrong<T>(arg: Initializer<T>) {
return typeof arg === 'function' ? arg() : arg // error here
}
const isFunction = (arg: any): arg is Function => typeof arg === 'function'
function correct_2<T>(arg: Initializer<T>) {
return isFunction(arg) ? arg() : arg
}
【问题讨论】:
标签: typescript