以下是我想要做的:
class MyClass {
@Reflect.metadata("desc", "My outer property") // OK
outerProp: {
@Reflect.metadata("desc", "My inner property") // Error
innerProp: string;
};
}
错误为"需要属性或签名。">
为什么装饰器为outerDrop而不为innerProp工作?在不将outerDrop的类型重构为命名类的情况下,有什么方法可以做到这一点吗?
反射注释只能附加到类和类成员,如文档中所述:
Decorator添加了将类及其成员扩充为类是通过声明性语法定义的
第一个注释被添加到MyClass
的outerProp
属性,这是可以的:
@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;
}