2013-03-14 69 views
9

我想在模块中使用get/set属性创建一个变量。 我看到一些工作示例创建类,看起来像这里面一个get/set属性:在Typescript中使用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 
} 

我怎样做那?

回答

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); 
+5

尚未实施? – oligofren 2014-07-13 22:34:30

+0

@ ryan-cavanaugh此功能的任何更新以及是否会实施?如果没有,我很想听听为什么! – bnieland 2016-08-04 17:31:02

5

访问者仅适用于“成员”。成员只能是类的一部分,至少这是打字稿的方式。

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

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 

虽然老实说,我也不会:)

0

您还可以使用静态属性包装在一个类:

module MyModule { 
    export class MyClass { 
    private static view; 
    static get View() { return this.view; } 
    static set View(value) { this.view = value } 
    } 
} 
相关问题