【问题标题】:Typechecking Components that implement an Interface实现接口的类型检查组件
【发布时间】:2022-01-09 23:12:10
【问题描述】:

在 Angular 中,我想为组件指定类型,该组件实现了我传递给类的某个接口。

示例: A类有这个签名

class A {
  constructor(public component: ?) {}
}

然后我们声明一个接口I

export interface I<T> {
  setData(data: T): void;
}

组件B实现接口I

class B implements I<string> {
  setData(data: string) { ... }
}

现在的问题是不仅组件 B 实现了 I,而且组件 C、D 和 E。此外,类 A 应该能够处理组件 B、C、D 和 E,即所有实现接口 I 的组件。 我可以在 A 类中指定组件类型是任何实现接口 I 的组件吗?我现在的解决方案是

component: any

但我想指定它可以是任何具有它实现 I 的限制。

还有其他方法吗?

【问题讨论】:

  • component: I 不起作用吗?
  • 也许可行。问题是当我这样做时,我收到以下错误,我不知道如何解决:Property 'setData' is missing in type 'typeof B' but required in type 'I&lt;any&gt;'.`即使该方法在 B 中被覆盖。有什么想法吗?
  • 我尝试时出现此错误:new A(B)
  • constructor(public component: ?) 这个我不明白。如果它是一个组件,那么它将在这里使用依赖注入,这不适用于作为注入令牌的接口
  • ? 应该替换为 any 并且它会起作用。我不是在注入接口,而是在注入实现特定接口的组件。我写了?,因为除了“any”之外,我不知道如何指定该组件的类型。而且我不能说它是“B”类型,因为它应该是一个通用组件,但是实现了特定的接口 I。

标签: angular typescript interface components typechecking


【解决方案1】:

以下内容对我有用:

class A {
  constructor(public component: new (...args: any[]) => I<any>)
}

【讨论】:

    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 2010-09-21
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    相关资源
    最近更新 更多