在下面的代码中,bind方法已经被调用,所以 this.flavour
不成为 undefined
当 bake
是由其他类调用的。
interface CakeEvent{
onBake(flour:number):void
}
class Cake {
private listener: CakeEvent
addChocolate(listener: CakeEvent) {
this.listener = listener
}
onBake(flour: number) {
this.listener.onBake(flour)
}
}
class Chocolate {
private flavour = 'vanilla'
private bake(flour:number) {
console.log(this.flavour, flour)
}
constructor(private cake: Cake) {
const listener: CakeEvent = {
onBake: this.bake.bind(this) // <- Here
}
this.cake.addChocolate(listener)
}
}
const cake = new Cake()
const choco = new Chocolate(cake)
cake.onBake(4564)
然而,一旦在函数bake上调用方法bind,这个类型就变成了 any
. 这意味着如果Typescript的属性与接口定义不匹配,它将不会抛出一个编译错误。CakeEvent
. 如果它成为 any
介面 CakeEvent
是一种无用的时间浪费。
返回any的动机是什么,难道不应该返回同类型的函数吗?
目前,有什么办法可以防止变成any?
从 node_modules/typescript/lib.es5.d.ts
/**
* For a given function, creates a bound function that has the same body as the original function.
* The this object of the bound function is associated with the specified object, and has the specified initial parameters.
* @param thisArg An object to which the this keyword can refer inside the new function.
* @param argArray A list of arguments to be passed to the new function.
*/
bind(this: Function, thisArg: any, ...argArray: any[]): any;
我是在排版游戏场玩了一圈后发现的。
只需设置 strictBindCallApply
在TS配置中改为true。
这里是参考资料。https:/www.typescriptlang.orgdocshandbookcompiler-options.html。