【发布时间】:2018-08-08 10:55:23
【问题描述】:
function on(event: string, listener: Function) {
console.log('on event: ', event, 'typeof listener:', typeof (listener));
listener();
}
function on1(event: string, listener: (...args: any[]) => void) {
console.log('on event: ', event, 'typeof listener:', typeof (listener));
listener();
}
function createCallback(a: number): Function {
let f = (a: number) => {
console.log('return a:', a);
return (a: number) => { return a + 1 };
};
return f(a);
}
let f = createCallback(1);
console.log('type of f', typeof (f));
// on("start", f);
on1("start", f);
在上面的代码中,on("start", f) 工作正常,但 on1("start", f); 返回错误
如果我删除createCallback 的Function 类型断言,on1("start", f) 有效,Function 不是表示闭包的通用类型吗?
我不明白他为什么将Function 更改为(...args: any[]) => void,这导致我的代码中断。
【问题讨论】:
-
“函数不是表示闭包的通用类型吗?” — 对,它是一个 general 类型,但您的函数
on1需要更具体的类型。就像Any是一个通用类型,不能绑定到更具体的类型(但它本身可以绑定任何东西)。
标签: typescript