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 に答える