【问题标题】:typescript getter / setter overload打字稿getter / setter重载
【发布时间】: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;
    } 
}

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

【问题讨论】:

    标签: typescript overloading getter-setter


    【解决方案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) 不幸的是,当前的行为是设计使然。
    • 谢谢,所以您的解决方案是目前的解决方案。即使我不喜欢一个属性有多种类型的事实。
    猜你喜欢
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多