Не похоже, что typeof
защита типа существует для типов функций.Кажется, это по замыслу (эта проблема касается instanceof
охранников типа, но я предполагаю, что это аналогичные рассуждения).
Однако в TypeScript есть определяемый пользователем типguards , что означает, что вы можете написать функцию, которая сужает тип аргумента так, как вам нравится.Итак, какой тест во время выполнения определит, является ли какое-либо значение x
функцией типа (conf: {}) => void
?Вы можете проверить, если typeof x === "function"
, конечно.Это не означает, что функция будет принимать параметр какого-либо определенного типа и ничего не будет возвращать.Может быть, вы просто знаете, что любая функция, которую вы извлекаете из getProperty
, будет правильного типа.Если нет, вы должны выяснить, как отличить разницу во время выполнения.(Является ли x.length === 1
? Есть ли какая-то другая отличительная особенность?)
Как только вы узнаете свой тест во время выполнения, вы можете создать защиту типа:
function isFunctionOfRightType(x: any): x is (conf: {})=>void {
return (typeof x === 'function') && (x.length === 1); // or whatever test
}
// ... later
let property: this[keyof this] = utils.getProperty(this, name);
if (isFunctionOfRightType(property)) { property(conf); } // no error now
Надеюсь, что это поможет.Удачи!