Typescript 方法重载对我不起作用

Typescript 方法重载对我不起作用,typescript,Typescript,我想对私有变量执行简单的get/set方法,所以我这样做了 _Var1:number = 0; Var1():number { return this._Var1; } Var1(num:number) { this._Var1 = num; } 这会引发编译器错误。一个不带参数的方法和一个带参数的方法可以共享相同的名称吗?给你 Var1(input?:number):number { if(typeof input != typeof 123)

我想对私有变量执行简单的get/set方法,所以我这样做了

_Var1:number = 0;

Var1():number
{
   return this._Var1;
}

Var1(num:number)
{
   this._Var1 = num;
}
这会引发编译器错误。一个不带参数的方法和一个带参数的方法可以共享相同的名称吗?

给你

    Var1(input?:number):number
    {
        if(typeof input != typeof 123)
            return this._Var1;
        else
            return this._Var1 = input;
    }
但是,如果您对重载签名感到好奇,则需要执行以下操作:

class Foo{

    _Var1:number = 0;

    // Sample of overload signatures
    Var1():number
    Var1(input:number):number
    Var1(input?:any):number // The last signature Must be super set of all previous signatures. 
    {
        if(typeof input != typeof 123)
            return this._Var1;
        else
            return this._Var1 = input;
    }
}
更多 关于函数重载的文档:

给你

    Var1(input?:number):number
    {
        if(typeof input != typeof 123)
            return this._Var1;
        else
            return this._Var1 = input;
    }
但是,如果您对重载签名感到好奇,则需要执行以下操作:

class Foo{

    _Var1:number = 0;

    // Sample of overload signatures
    Var1():number
    Var1(input:number):number
    Var1(input?:any):number // The last signature Must be super set of all previous signatures. 
    {
        if(typeof input != typeof 123)
            return this._Var1;
        else
            return this._Var1 = input;
    }
}
更多
关于函数重载的文档:

如果您的目标是ECMAScript 5或更高版本,那么您的代码只需要get和set关键字:

_Var1:number = 0;

get Var1():number
{
   return this._Var1;
}

set Var1(num:number)
{
    this._Var1 = num;
}
如果您想针对较旧的版本,我建议使用getVar1和setVar1方法名,而不是重载,这将迫使您检查输入。这两种方法非常简洁

或者,您可以利用一个巧妙的技巧,将运行时变量用作默认参数:

Var1(num: number = this._Var1) {
    return this._Var1 = num;
}

我仍然更喜欢名为get。。。并设置。。。出于以下原因:为此生成的JavaScript看起来很糟糕,因为它将包含GET不需要的代码。设置时,它还会返回一个值,这不是常规约定。

如果您的目标是ECMAScript 5或更高版本,则代码只需要get和set关键字:

_Var1:number = 0;

get Var1():number
{
   return this._Var1;
}

set Var1(num:number)
{
    this._Var1 = num;
}
如果您想针对较旧的版本,我建议使用getVar1和setVar1方法名,而不是重载,这将迫使您检查输入。这两种方法非常简洁

或者,您可以利用一个巧妙的技巧,将运行时变量用作默认参数:

Var1(num: number = this._Var1) {
    return this._Var1 = num;
}

我仍然更喜欢名为get。。。并设置。。。出于以下原因:为此生成的JavaScript看起来很糟糕,因为它将包含GET不需要的代码。设置时,它还会返回一个值,这不是常规惯例。

您需要一个通用的函数重载实现:

Var1(): number;
Var1(num: number): void;
Var1(num?: number): any
{
    if (num === undefined) return this._Var1;
    this._Var1 = num;
}

重载的是函数的声明,而不是它的实现。最后一行:
Var1(num?:number):any
是通用函数声明。这是必要的。上面的几行是重载声明。

您需要函数重载的通用实现:

Var1(): number;
Var1(num: number): void;
Var1(num?: number): any
{
    if (num === undefined) return this._Var1;
    this._Var1 = num;
}

重载的是函数的声明,而不是它的实现。最后一行:
Var1(num?:number):any
是通用函数声明。这是必要的。上面的几行是重载声明。

我喜欢可选参数的想法,这让我省去了很多挫折。如果你不知道术语(e.x.签名),这是一个很难找到的答案。谢谢我喜欢可选参数的想法,这让我省去了很多挫折。如果你不知道术语(e.x.签名),这是一个很难找到的答案。谢谢对于重载函数,您需要一个通用实现(和通用函数声明)。重载的是函数的声明,而不是它的实现。对于重载函数,您需要一个泛型实现(和泛型函数声明)。重载的是函数的声明,而不是它的实现。