TypeScript:如何在内部属性上使用Reflect.metadata



以下是我想要做的:

class MyClass {
@Reflect.metadata("desc", "My outer property") // OK
outerProp: {
@Reflect.metadata("desc", "My inner property") // Error
innerProp: string;
};
}

错误为"需要属性或签名。">

为什么装饰器为outerDrop而不为innerProp工作?在不将outerDrop的类型重构为命名类的情况下,有什么方法可以做到这一点吗?

反射注释只能附加到类和类成员,如文档中所述:

Decorator添加了将类及其成员扩充为类是通过声明性语法定义的

第一个注释被添加到MyClassouterProp属性,这是可以的:

@Reflect.metadata("desc", "My outer property") // OK
outerProp: {

但是第二个注释被添加到typescript接口的属性,而不是类。这个类型定义在运行时不会出现,因为它只是typescript编译器的一个提示,这意味着你不能向它添加注释:

@Reflect.metadata("desc", "My inner property") // Error
innerProp: string;

为了解决这个错误,您必须将outerProp重构到一个命名类中——这是没有办法的,因为注释只能添加到编译后的javascript:中仍然存在的东西中

@Reflect.metadata("desc", "My outer property")
class OuterPropType {
@Reflect.metadata("desc", "My inner property")
innerProp: string;
}
class MyClass {
outerProp: OuterPropType;
}

相关内容

最新更新