打字稿getter / setter重载

Posted

技术标签:

【中文标题】打字稿getter / setter重载【英文标题】:typescript getter / setter overload 【发布时间】:2016-04-07 23:48:38 【问题描述】:

有没有办法重载 typescript getter / setter?

我知道 typescript 提供 function overloading 所以我想出了这样的东西:

public get stringOrNumber(): string  return this._stringOrNumber; 

public set stringOrNumber(value: number);
public set stringOrNumber(value: string)  
    if(typeof stringOrNumber == 'number') 
        this._stringOrNumber = value.toString();
     else 
        this._stringOrNumber = value;
     

但不幸的是,这不起作用 =)

【问题讨论】:

【参考方案1】:

你的意思是这样的吗?

class A 

    protected _stringOrNumber: string|number;

    public get stringOrNumber(): string|number  
        return this._stringOrNumber; 
    

    public set stringOrNumber(value: string|number)  
        if(typeof this.stringOrNumber === 'number') 
            this._stringOrNumber = value.toString();
         else 
            this._stringOrNumber = value;
         
    

[Playground]

【讨论】:

嗨马丁,这绝对是一个改进。但我更希望受保护的属性和 getter 只代表一个字符串。只有二​​传手应该有一个数字重载。但后来我得到一个错误,因为 getter 和 setter 必须具有相同的类型:/ 有一个已解决的问题:github.com/Microsoft/TypeScript/issues/2521 (github.com/Microsoft/TypeScript/issues/4087) 不幸的是,当前的行为是设计使然。 谢谢,所以您的解决方案是目前的解决方案。即使我不喜欢一个属性有多种类型的事实。

以上是关于打字稿getter / setter重载的主要内容,如果未能解决你的问题,请参考以下文章

再次:打字稿函数重载

打字稿重载、可选参数和类型推断

打字稿中的重载函数类型

打字稿、泛型和重载

带有箭头函数的打字稿重载方法

在打字稿中实现函数重载