为什么TypeScript的类型检查器认为通用对象的属性不能是函数?

时间:2019-06-07 18:18:48

标签: typescript typescript-generics

这是一个最小的例子:

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中,函数可以并且经常是对象的键控属性。那么这是什么问题呢?

1 个答案:

答案 0 :(得分:1)

是否有可能没有关于泛型类型T的线索,变量obj不会被视为any?如果将行Test<T>更改为Test<T extends any>会发生什么?

但是,如the comment by Titian Cernicova-Dragomir所示,在最新版本中似乎不再是问题。