TypeScript具有用于定义访问者属性的内置功能
class Test {
constructor(private value: number = 123) {
}
public get Value(): number {
return this.value;
}
public set Value(value: number) {
this.value = value;
}
}
编译器输出
var Test = (function () {
function Test(value) {
if (value === void 0) { value = 123; }
this.value = value;
}
Object.defineProperty(Test.prototype, "Value", {
get: function () {
return this.value;
},
set: function (value) {
this.value = value;
},
enumerable: true,
configurable: true
});
return Test;
})();
JavaScript还支持值属性
Object.defineProperty(someObj, "MyValueProperty", {
// The key here is value as opposed to get and set.
value: 5
enumerable: true,
configurable: false
});
如何使用TypeScript定义值属性?
注意:我注意到我正在指向另一个有关TypeScript getter和setter的stackoverflow问题。这不是我想要的。我想知道如何创建实现value
,不 get
和set
的属性!
答案 0 :(得分:3)
您可以执行以下操作:
class Test {
Value : number;
}
Object.defineProperty(Test.prototype, "Value", {
value: 5,
enumerable: true,
configurable: false
});
var t = new Test();
t.Value = 54;
console.log(t.Value); // 5
但为什么不直接返回get函数中的值?
class Test {
public get Value(): number {
return 5;
}
}
var t = new Test();
t.Value = 54;
console.log(t.Value); // 5
使用装饰器
如果你真的想要一个value属性,那么更优雅的方法是创建一个可重用的装饰器:
function ValueProperty(value: any) {
return (target: Object, propertyKey: string) => {
Object.defineProperty(target, propertyKey, {
value,
enumerable: true,
configurable: false
});
};
}
然后使用它:
class Test {
@ValueProperty(5)
Value: number;
}
new Test().Value; // 5
答案 1 :(得分:1)
Typescript目前不支持。查看语言规范和typescript编译器的Emitter
类,我找不到任何表明支持值属性的东西。
我想您唯一的选择是使用原始Javascript和Object.defineProperty
来定义它们。