typescript 如何通过TypeScript中的装饰器更改实例属性:http://romkevandermeulen.nl/2018/01/24/typescript-property-deco
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了typescript 如何通过TypeScript中的装饰器更改实例属性:http://romkevandermeulen.nl/2018/01/24/typescript-property-deco相关的知识,希望对你有一定的参考价值。
function makePropertyMapper<T>(prototype: any, key: string, mapper: (value: any) => T) {
const values = new Map<any, T>();
Object.defineProperty(prototype, key, {
set(firstValue: any) {
Object.defineProperty(this, key, {
get() {
return values.get(this);
},
set(value: any) {
values.set(this, mapper(value));
},
enumerable: true,
});
this[key] = firstValue;
},
enumerable: true,
configurable: true,
});
}
function exampleDecorator(multiplier: number) {
return function(target: any, key: string) {
makePropertyMapper(target, key, (value: number) => {
return value * multiplier;
});
};
}
class Example {
@exampleDecorator(3)
myNumber: number;
@exampleDecorator(3)
withInitializer = 2;
}
const example = new Example();
console.log(example.myNumber); // undefined
console.log(Object.keys(example).includes("myNumber")); // false
console.log(example.withInitializer); // 6
console.log(Object.keys(example).includes("withInitializer")); // true
example.myNumber = 3;
console.log(example.myNumber); // 9
console.log(Object.keys(example).includes("myNumber")); // true
以上是关于typescript 如何通过TypeScript中的装饰器更改实例属性:http://romkevandermeulen.nl/2018/01/24/typescript-property-deco的主要内容,如果未能解决你的问题,请参考以下文章
如何通过npm编译Typescript代码
如何通过 javascript/typescript 获取“事件”对象的特定元素
如何通过 TypeScript 中的映射类型删除属性
通过 Typescript 和 HTML 选择选项后,如何禁用整个选择下拉字段?
如何通过数据库在 TypeScript 类中定义属性?
Typescript - 如何访问通过命名空间声明的类?