【发布时间】:2019-04-28 04:30:57
【问题描述】:
我正在尝试创建一个类型安全的 EventEmitter,但是我无法强制传递给泛型的接口是 EventMap 类型而没有 TypeScript 抱怨。
type EventHandler = () => void
type EventMap = Record<string, EventHandler>
interface EventListener {
handler: EventHandler
once: boolean
}
export class Emitter<Events extends EventMap> {
private listeners = new Map<keyof Events, EventListener[]>()
private addListener<E extends keyof EventMap>(type: E, listener: EventListener) {
const listeners = this.listeners.get(type) || []
this.listeners.set(type, [...listeners, listener])
}
@bind
public on<E extends keyof EventMap>(type: E, handler: Events[E]) {
this.addListener(type, { handler, once: false })
}
}
interface TestEvents {
test: (a: number) => void,
}
class Test extends Emitter<TestEvents> {}
给我
Type 'TestEvents' does not satisfy the constraint 'Record<string, EventHandler>'.
Index signature is missing in type 'TestEvents'.
【问题讨论】:
-
请提供
Record<,>类型的定义是否需要索引器?类似:[index:string] : string -
Record是 TypeScript 中的内置类型。编辑:stackoverflow.com/questions/51936369/…
标签: typescript