Typescript 方法重载对我不起作用
我想对私有变量执行简单的get/set方法,所以我这样做了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)
_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.签名),这是一个很难找到的答案。谢谢对于重载函数,您需要一个通用实现(和通用函数声明)。重载的是函数的声明,而不是它的实现。对于重载函数,您需要一个泛型实现(和泛型函数声明)。重载的是函数的声明,而不是它的实现。