Във фрагмента по-долу typescript не излъчва никаква грешка, въпреки че има аргумент, имплицитно въведен като any
.
declare function constrainedHOF<T extends (...args: any[]) => any>(callback: T): T;
// x is implicitly any, but typescript does not complain
const hof = constrainedHOF(x => {
console.log(x);
});
Предполагам, че проблемът е ограничението на типа T extends (...args: any[]) => any
, което кара typescript да мисли, че е изрично any
.
Как да се реши това правилно, като едновременно се запази ограничението на общия тип да бъде функция от всякакъв тип и се накара typescript да се оплаква от имплицитно any
, когато срещне случайно ненаписано обратно извикване вътре в constrainedHOF
?
Тестван в последния стабилен Typescript 3.9.2.
I prepared a Playground Link that demonstrates the problem including a проверете дали проблемът наистина идва от общото ограничение.