Почему средство проверки типов в TypeScript считает, что свойство универсального объекта не может быть функцией? - PullRequest
1 голос
/ 07 июня 2019

Вот минимальный пример:

function Test<T>(obj: T) {
    for (let key in obj) {
        let prop = obj[key];
        if (typeof prop === 'function') {
            prop();
        }
    }
}

TypeScript не скомпилирует это, говоря, что prop внутри блока if имеет тип "never".

Error TS2349 (TS) Cannot invoke an expression whose type lacks a call signature. Type 'never' has no compatible call signatures.

Но в JavaScript функции могут и часто являются ключевыми свойствами объектов. Так в чем здесь проблема?

1 Ответ

1 голос
/ 07 июня 2019

Возможно ли, что, поскольку нет никаких подсказок относительно универсального типа T, переменная obj не рассматривается как any? Что произойдет, если вы измените строку Test<T> на Test<T extends any>?

Однако, как показано в комментарии Тициана Черникова-Драгомира , похоже, что в последних версиях это больше не проблема.

...