9

我想在模块内创建一个具有 get/set 属性的变量。我看到了一些在类中创建 get/set 属性的工作示例,如下所示:

class MyClass {
    private view;
    get View() { return this.view; }
    set View(value) { this.view = value }
}

但我想在模块内做同样的事情:

module MyModule {
    export var view;
    //I want to create get/set methods for view property here
}

我怎么做 ?

4

3 回答 3

11

我认为这只是一个疏忽。我会向设计团队提出这个问题(除了“我们还没有实现它”之外,我没有看到任何明显的理由来禁止它)。解决缺乏一流语言支持的问题相当简单:

module Bar {
    var _qua = 42;

    declare export var qua: number;
    Object.defineProperty(Bar, 'qua', {
        get: function() { return _qua; },
        set: function(value) { _qua = value; }
    }); 
}

// Works
var x = Bar.qua;
console.log(x);
Bar.qua = 19;
console.log(Bar.qua);
于 2013-03-14T17:48:22.170 回答
5

访问器仅适用于“成员”。成员只能是类的一部分,至少 typescript 是这样的。

访问器是在类原型上定义的,这是模块所没有的。如果你真的想,你可以手动定义它,它确实有效。

module MyModule {
    var view;
    export var View;
    Object.defineProperty(MyModule, "View", {
        get: function () {
            console.log(1);
            return view;
        },
        set: function (val) {
            console.log(2, val);
            view = val;
        },
        enumerable: true,
        configurable: true
    });
}

MyModule.View = 555;
window["mm"] = MyModule.View;

正如预期的那样,我得到了以下输出:

> 2 555
> 1

虽然老实说我不会:)

于 2013-03-14T17:48:44.010 回答
0

您还可以将其包装在具有静态属性的类中:

module MyModule {
  export class MyClass {
    private static view;
    static get View() { return this.view; }
    static set View(value) { this.view = value }
  }
}
于 2015-12-06T07:20:29.847 回答