【发布时间】: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<any>'.`即使该方法在 B 中被覆盖。有什么想法吗? -
我尝试时出现此错误:
new A(B) -
constructor(public component: ?)这个我不明白。如果它是一个组件,那么它将在这里使用依赖注入,这不适用于作为注入令牌的接口 -
?应该替换为 any 并且它会起作用。我不是在注入接口,而是在注入实现特定接口的组件。我写了?,因为除了“any”之外,我不知道如何指定该组件的类型。而且我不能说它是“B”类型,因为它应该是一个通用组件,但是实现了特定的接口 I。
标签: angular typescript interface components typechecking