如何获得打字稿发出属性定义,如自定义属性:如何打字稿
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