Вы можете увидеть демонстрацию на этой игровой площадке .
Я сделал простой обобщенный тип c, который может представлять либо переменную, либо функцию, которая возвращает переменную. Но, к сожалению, он не работает с типичной проверкой 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
}