我们说我已经宣布以下类在TypeScript中用作装饰器:
class Property {
static register(...props: Property[]) {
return function(cls: any) {
props.forEach(prop => {
Object.defineProperty(cls.prototype, prop.propertyName, {
get() {
return this[`${prop.propertyName}_`] + ' (auto-generated)';
},
set(value: any) {
this[`${prop.propertyName}_`] = value;
},
});
});
};
}
constructor(private readonly propertyName: string) {}
}
当应用于这样的类时:
@Property.register(new Property('myCustomProperty'))
class MyClass {}
结果是一个具有名为myCustomProperty
的自动生成的属性setter / getter的类:
const obj = new MyClass();
obj['myCustomProperty'] = 'asdf';
console.info(obj['myCustomProperty_']); // outputs 'asdf'
console.info(obj['myCustomProperty']); // outputs 'asdf (auto-generated)'
不幸的是,TypeScript在编译时似乎没有任何关于此属性的知识,因为它是在运行时生成的。
确保TypeScript识别这些自动生成属性的存在的最佳方法是什么?理想情况下,所有内容都会自动为我生成,因此我不必在其他地方维护任何其他类型。