我想定义一个将回调作为参数的函数,并且应该需要该回调的参数。 Typescript正确地报告了一个参数类型不匹配的回调,但没有说明没有预期参数的回调。
为什么第二个on
调用没有错误,有没有办法让它出错?
function on(callback: (num: number) => void) {
callback(5);
}
on((string:bob) => { // typescript error
console.log("What");
});
on(() => { // no typescript error?
console.log("What");
});
答案 0 :(得分:3)
没有办法做到这一点。
参数少于调用者提供的回调在JavaScript中非常非常 - forEach
,map
,filter
等函数都提供3个或更多参数,但经常被赋予1参数函数作为回调。
答案 1 :(得分:-1)
您可以为处理程序定义类型。现在你只能传递一个带有字符串参数的回调。
// define a handler so you can use it for callbacks
type Handler = (t: string) => void;
function doSomething(t: string): void {
console.log("hello " + t)
}
function thisFirst(callback: Handler) {
callback('world') // ok
callback(4) // not assignable to type 'string'
}
thisFirst(doSomething)