【发布时间】:2017-08-11 18:05:42
【问题描述】:
假设您有实现某个装饰器的类:
@Component
class A
@Component
class B
如果你想要一个变量来保存其中一些类的类本身,它会有什么类型?
componentClass: typeof A | typeof B;
但是你是否已经在想:如果你有很多类,枚举类不是一个好习惯,当你不知道它们时,它甚至不是一个选择。
所以剩下的选项是(编辑:因为打字稿不允许typeof泛型):
componentClass: any;
但这也不好!
我想为此定义一个类型保护,因此我可以将any 类型替换为可以实际检查对象是否具有@Component 装饰器的类型,因此可以将其声明为这个:
componentClass: ComponentClass;
只是一个想法
我认为最好的方法是为它定义一个类型,并在其中定义守卫。 但这是不可能的。
@HasDecorator("Component")
type ComponentClass = any;
希望看到你的想法来解决这个问题。谢谢!
【问题讨论】:
-
你不能那样做。装饰器是在运行时调用的函数,而类型系统是在编译时调用的。
标签: typescript reflect-metadata