这是一个最小的例子:
function Test<T>(obj: T) {
for (let key in obj) {
let prop = obj[key];
if (typeof prop === 'function') {
prop();
}
}
}
TypeScript不会编译它,说prop
块内的if
的类型是“从不”。
Error TS2349 (TS) Cannot invoke an expression whose type lacks a call signature. Type 'never' has no compatible call signatures.
但是在JavaScript中,函数可以并且经常是对象的键控属性。那么这是什么问题呢?
答案 0 :(得分:1)
是否有可能没有关于泛型类型T
的线索,变量obj
不会被视为any
?如果将行Test<T>
更改为Test<T extends any>
会发生什么?
但是,如the comment by Titian Cernicova-Dragomir所示,在最新版本中似乎不再是问题。