请考虑以下代码:
abstract class AbstractBusEvent { }
interface EventBusListener<T extends AbstractBusEvent> {
(event: T): void;
}
class EventBus {
public register<T extends AbstractBusEvent>(eventConstructor: { new (...args: any[]): T },
listener: EventBusListener<T>): void {
}
}而现在
class TempEvent extends AbstractBusEvent {}
class MyEvent extends AbstractBusEvent {}
const bus: EventBus = new EventBus();
bus.register(TempEvent, (e: MyEvent)=>{});//LINE X问题是,在X行,我没有得到任何错误,尽管如你所见,它是错误的。我的错误在哪里?
发布于 2019-04-15 19:29:43
您的TempEvent和MyEvent是相同的。这是没有任何区别的。因此,没有类型差异是正确的,因此您可以在register方法中混合这两种类型。然而,如果你添加了成员字段,那么if编译器将会报错,例如
class TempEvent extends AbstractBusEvent {
props: string;
}
class MyEvent extends AbstractBusEvent {
props: number;
}https://stackoverflow.com/questions/55688068
复制相似问题