17

TypeScript に次のようなプロパティ定義を発行させるにはどうすればよいですか。

Object.defineProperties(this, {
    view: {
        value: view,
        enumerable: false,
        writable: false,
        configurable: false
    },
});
4

3 に答える 3

10

にコンパイルされるTypeScriptでとgetを使用できます。setObject.defineProperties

これはECMAScript5の機能であるため、ES3(コンパイラーのデフォルト)を対象としている場合は使用できません。ES5をターゲットにすることに満足している場合は--target ES5、コマンドに追加してください。

TypeScript:

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

コンパイル先:

var MyClass = (function () {
    function MyClass() { }
    Object.defineProperty(MyClass.prototype, "View", {
        get: function () {
            return this.view;
        },
        set: function (value) {
            this.view = value;
        },
        enumerable: true,
        configurable: true
    });
    return MyClass;
})();

ただし、列挙可能で構成可能な設定を完全に制御したい場合は、生のObject.definePropertiesコードを使用できます。

于 2012-10-04T21:42:25.497 に答える
1

すべてのプロパティをそのように出力したい場合、これは現在サポートされていません。CodePlex サイトで問題を提出し、ユース ケースと要件の詳細を記載することをお勧めします。

--target ES5 を指定してコンパイルすると、次のようになります。

class n {
    get foo() { return 3; }
    bar() { return 5; }
}

次のコードが生成されます。

var n = (function () {
    function n() { }
    Object.defineProperty(n.prototype, "foo", {
        get: function () {
            return 3;
        },
        enumerable: true,
        configurable: true
    });
    n.prototype.bar = function () {
        return 5;
    };
    return n;
})();
于 2012-10-02T18:43:02.880 に答える