在下面的代码段中,尽管有一个隐式键入为any
的参数,但typescript不会发出任何错误。
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
上,这使打字稿认为它是显式的any
。
如何正确解决此问题,既要使通用类型约束保持为“任何类型的函数”,又要使Typescript在any
内部遇到意外的未键入回调时抱怨隐式constrainedHOF
? / p>
在最新稳定的Typescript 3.9.2中进行了测试。
我准备了Playground Link来演示问题,其中包括检查问题是否确实与通用约束有关。
答案 0 :(得分:1)
使用Function
界面怎么样?
// according to your declaration, you return a function, is that correct?
declare function callbackHOF<T extends Function>(callback: T): T
// @ts-expect-error noImplicitAny
const callbackHofNonTyped = someHOF(x => {
console.log(x);
});
const callbackHofTyped = someHOF((x: number) => {
console.log(x);
});