为什么Javascript bind会返回任何?

问题描述 投票:0回答:1

在下面的代码中,bind方法已经被调用,所以 this.flavour 不成为 undefinedbake 是由其他类调用的。

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;
javascript typescript callback
1个回答
0
投票

我是在排版游戏场玩了一圈后发现的。

只需设置 strictBindCallApply 在TS配置中改为true。

这里是参考资料。https:/www.typescriptlang.orgdocshandbookcompiler-options.html。

© www.soinside.com 2019 - 2024. All rights reserved.