2
我想使用TypeScript將強類型事件添加到類EventEmitter系統。使用TypeScript和EventEmitter鍵入事件
目前,我們定義類型,如:
interface TypedMsg<Name, T> {
messageType: Name;
message: T;
}
type TypedMsgFoo = TypedMsg<'FOO', string>;
type TypedMsgBar = TypedMsg<'BAR', number>;
type EitherFooOrBar = TypedMsgFoo | TypedMsgBar;
我想這樣定義一個接口:
interface EventHandler<T extends TypedMsg<any, any> {
on: (messageType: T.messageType, handler: (T.message) => void) => void;
}
但打字稿不支持提取亞型像T.messageType
。有沒有另一種方法來做到這一點?
的最終目標將是確定適當的打字處理程序只:
class FooBarHandler implements EventHandler<EitherFooOrBar> {
on(messageType: EitherFooOrBar.messageType) {...}
}