如何獲得打字稿發出屬性定義,如自定義屬性:如何打字稿
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
如何獲得打字稿發出屬性定義,如自定義屬性:如何打字稿
Object.defineProperties(this, {
view: {
value: view,
enumerable: false,
writable: false,
configurable: false
},
});
當我偶然發現TypeScript Handbook: Decorators時,我一直在尋找完全相同的東西。在「法裝飾」的段落,他們定義@enumerable
裝飾廠,它看起來像這樣(我只是複製粘貼從那裏):
function enumerable(value: boolean) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
descriptor.enumerable = value;
};
}
,他們用這樣的:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
@enumerable(false)
greet() {
return "Hello, " + this.greeting;
}
}
所以解決它的另一種方式是通過使用裝飾器。
PS: 此功能需要experimentalDecorators
標誌傳遞給tsc
或tsconfig.json
設置。
此,如果你希望所有的屬性要發出這樣的目前不支持。我建議在CodePlex site處提交一個問題,詳細說明您的使用情況和要求。
如果你做的ES5 --target編譯,你可以有這樣的事情:
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;
})();
您可以使用打字稿及get
set
,這編譯成Object.defineProperties
。
這是一個ECMAScript 5功能,因此如果您的目標是ES3(編譯器的默認設置),則無法使用它。如果您很高興瞄準ES5,請將--target ES5
添加到您的命令中。
打字稿:
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
代碼。
是啊,我正在尋找一種方法來定製'可枚舉','可配置'和'可寫'屬性來匹配我現有的代碼。 – Spongman