假设您有实现特定装饰器的类:
@Component
class A
@Component
class B如果您希望有一个变量来保存其中一些类的类本身,那么它会有什么类型?
componentClass: typeof A | typeof B;但是你可能已经在想:当你有很多类的时候,列举这些类并不是一个好的实践,当你不了解它们的时候,它甚至也不是一个选项。
所以剩下的选项是(编辑:因为类型记录不允许泛型)
componentClass: any;但这也不好!
--我想为这个定义一个类型保护,所以我可以从一个可以检查对象是否有@组件装饰器的类型替换any类型,因此可以这样声明它:
componentClass: ComponentClass;只是一个想法
我认为最好的方法是为它定义一个类型,在那里定义守卫。,但这是不可能的,。
@HasDecorator("Component")
type ComponentClass = any;希望看到你的想法来解决这个问题。谢谢!
发布于 2017-03-20 12:57:32
如果您有不同的类表示Component,那么为什么不为它们都创建一个基类:
abstract class ComponentClass { ... }
@Component
class A extends ComponentClass { ... }
@Component
class B extends ComponentClass { ... }然后,所有这些类都有一个类型,并且不需要类型混叠。
它对装饰师本身也很有用:
function Component(ctor: { new(): ComponentClass }) {}甚至:
function Component<T extends ComponentClass>(ctor: { new(): T }) {}编辑
当然,您也可以使用接口进行类似的操作:
interface ComponentClass { }
@Component
class A implements ComponentClass { }
@Component
class B implements ComponentClass { }第二版
如果您想传递一个ComponentClass (A,或B等),那么您可以:
function fn(cls: typeof ComponentClass) { ... }
fn(A);或
function fn<T extends ComponentClass>(cls: { new(): T }) { ... }
fn(B);(操场密码
https://stackoverflow.com/questions/42903987
复制相似问题