打字稿无法从打字稿装饰器访问 属性 类型。 (目标是:{})
Typescript cannot access property type from typescript decorator. (Target is: {})
我目前正在实现一个用于 VUE js 项目的依赖注入器。
我创建了一个 Inject 装饰器,我希望能够访问 属性 类型,我昨天让它工作,但发生了一些事情,我完全迷路了。我已经从控制台注销 JSON.stringify(target) 并且我收到一个空对象,这意味着我的装饰器在构造 class 之前是 运行。
我正在使用反射元数据来获取类型,但它解析为 null,因为目标是一个空对象。可以通过将类型作为装饰器参数传递来解决此问题,但是该解决方案并不像我想要的那样优雅。
有没有办法让装饰器等到 class 已经构建完成,或者是否有什么地方我完全错了?装饰器代码如下:
export const Inject = (): any => {
return (target: any, key: string): any => {
if (delete target[key]) {
Object.defineProperty(target, key, {
get: () => {
const type = Reflect.getMetadata('design:type', target, key);
return Injector.resolve(type);
},
});
}
};
};
装饰器注解如下:
@Inject()
public testService: TestService;
提前致谢!
所以,经过几天的折腾,我终于找到了为什么这不起作用的答案,这让我很受伤,因为它是如此明显。因此在 TS 配置文件中有一个标志需要设置为 true 以便发出装饰器元数据。 flag如下图:
"emitDecoratorMetadata": true
一旦设置好,代码就可以像以前一样工作了!
我目前正在实现一个用于 VUE js 项目的依赖注入器。
我创建了一个 Inject 装饰器,我希望能够访问 属性 类型,我昨天让它工作,但发生了一些事情,我完全迷路了。我已经从控制台注销 JSON.stringify(target) 并且我收到一个空对象,这意味着我的装饰器在构造 class 之前是 运行。
我正在使用反射元数据来获取类型,但它解析为 null,因为目标是一个空对象。可以通过将类型作为装饰器参数传递来解决此问题,但是该解决方案并不像我想要的那样优雅。
有没有办法让装饰器等到 class 已经构建完成,或者是否有什么地方我完全错了?装饰器代码如下:
export const Inject = (): any => {
return (target: any, key: string): any => {
if (delete target[key]) {
Object.defineProperty(target, key, {
get: () => {
const type = Reflect.getMetadata('design:type', target, key);
return Injector.resolve(type);
},
});
}
};
};
装饰器注解如下:
@Inject()
public testService: TestService;
提前致谢!
所以,经过几天的折腾,我终于找到了为什么这不起作用的答案,这让我很受伤,因为它是如此明显。因此在 TS 配置文件中有一个标志需要设置为 true 以便发出装饰器元数据。 flag如下图:
"emitDecoratorMetadata": true
一旦设置好,代码就可以像以前一样工作了!