在为类方法使用胖箭头语法时,我可以使用TypeScript重载吗?

Jon*_*att 24 typescript arrow-functions

我已经从传统形式转换了一些类:

class TestOverloads {
    private status = "blah";
    public doStuff(selector: JQuery);
    public doStuff(selector: string);
    public doStuff(selector: any) {
        alert(this.status);
    }
}
Run Code Online (Sandbox Code Playgroud)

改为使用箭头函数表达式:

class TestOverloads2 {
    private status = "blah";
    public doStuff = (selector: any) => {
        alert(this.status);
    }
}
Run Code Online (Sandbox Code Playgroud)

以便在回调中使用类方法时避免使用作用域问题(请参阅此处了解背景信息).

我无法弄清楚如何重新创建我的重载函数签名.使用胖箭时如何编写重载?

Rya*_*ugh 37

您可以为函数支持的调用签名编写内联类型文字:

class TestOverloads2 {
    private status = "blah";
    public doStuff: {
        (selector: JQuery): void;
        (selector: string): void;
    } = (selector: any) => {
        alert(this.status);
    }
}
Run Code Online (Sandbox Code Playgroud)

这有点可怕,所以你可能想把它提取到一个界面而不是:

interface SelectByJQueryOrString {
    (selector: JQuery): void;
    (selector: string): void;
}

class TestOverloads3 {
    private status = "blah";
    public doStuff: SelectByJQueryOrString = (selector: any) => {
        alert(this.status);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:在了解这一点的过程中,我遇到了以下TS问题与解答:https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html在“使用并集类型”部分的“页面”中,提到使用并集用于单位置重载。因此,在此示例中,定义为`selector:JQuery | string):void`。我想知道,实际实例是否也应该是联合而不是“任何”?-`... =(选择器:JQuery |字符串)=> {警报...` (2认同)