如何用查找类型激怒 TSC
How to anger TSC with Lookup types
我希望 Typescript 编译器 (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) 不满意,因为 Date 不是 Data[]。我怎样才能做到这一点?
我把事情复杂化了。解决方案很简单。
export class EventEmitter<EventTypes extends { [key: string]: any }> {
subscribe<Event extends keyof EventTypes>(type: Event, fn: (value: EventTypes[Event]) => any) {
}
}
请注意 type
参数如何从 keyof EventTypes
更改为 Event
。这就是它的症结所在。
我希望 Typescript 编译器 (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) 不满意,因为 Date 不是 Data[]。我怎样才能做到这一点?
我把事情复杂化了。解决方案很简单。
export class EventEmitter<EventTypes extends { [key: string]: any }> {
subscribe<Event extends keyof EventTypes>(type: Event, fn: (value: EventTypes[Event]) => any) {
}
}
请注意 type
参数如何从 keyof EventTypes
更改为 Event
。这就是它的症结所在。