【发布时间】:2022-08-17 07:02:08
【问题描述】:
我正在尝试在我的 TypeScript 应用程序中使用注释。但是我一定是做错了什么,因为Reflect.getMetadata() 总是返回undefined,尽管我可以在调试器中看到元数据似乎设置正确。
my-class.ts 带有带注释的属性:
import { jsonIgnore } from \'./json-ignor\';
export class MyClass {
public prop1: string;
@jsonIgnore() public prop2: string;
}
json-ignore.ts 带有装饰和注释功能:
const JSON_IGNORE = \'jsonIgnore\';
export function jsonIgnore(): any {
return Reflect.metadata(JSON_IGNORE, true);
}
export function jsonIgnoreReplacer(key: string, value: any): any {
const meta = Reflect.getMetadata(metadataKey, object, propertyKey);
// do something with the metadata...
}
现在meta 始终是undefined。但是当我在调试器中检查MyClass 实例时,我看到它的原型中设置了元数据:
- 我的班级:我的班级
- prop1:\'foo\'
- prop2:\'酒吧\'
- [[原型]]:对象
- __metadata__:
- 道具2:
- json忽略:真
- 道具2:
- __metadata__:
我还可以轻松访问__metadata__ 和它的条目(Object.getPrototypeOf(myClass).__metadata__.prop2.jsonIgnore),但是当它有一个 API 并且很可能无法在不同的浏览器中工作时,这绝对是一个 hack?
所以如果有人能指出我做错了什么......那将非常感激!
更多信息: tsconfig.json:
\"compilerOptions\": {
...
\"experimentalDecorators\": true,
\"emitDecoratorMetadata\": true,
}
标签: typescript annotations metadata reflect decoration