2013-03-14 51 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 } 
    } 
}