2017-06-11 15 views
0

シグネチャをミスタイプすると、Typescriptコンパイラ(TSC)が怒って欲しいです。ルックアップタイプでTSCを怒らせる方法

export class EventEmitter<EventTypes extends { [key: string]: any }> { 
    subscribe<Event extends keyof EventTypes>(type: keyof EventTypes, fn: <T extends EventTypes[Event]>(value: T) => any) { 

    } 
} 

export class Data { 
    name: string; 
} 

export class Experiment extends EventEmitter<{ "next": Data, "end": Data[] }> { 

} 

new Experiment().subscribe("end", (v: Date) => {}); 

私が理解する限り、日付はデータ[]ではないので、tscは(v:Date)に不満があります。どうすればこれを達成できますか?

答えて

0

私はものを複雑にしていました。解決策は簡単です。

export class EventEmitter<EventTypes extends { [key: string]: any }> { 
    subscribe<Event extends keyof EventTypes>(type: Event, fn: (value: EventTypes[Event]) => any) { 

    } 
} 

typeパラメータがEventkeyof EventTypesからどのように変化するかに注意してください。それがその要点です。

関連する問題