From d2885eab4a94dd52c54b4df004c3706ddde93ad7 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 17 Dec 2018 14:56:48 -0800 Subject: [PATCH] Add regression test for #29047 (#29066) --- ...eventEmitterPatternWithRecordOfFunction.js | 15 +++++++ ...EmitterPatternWithRecordOfFunction.symbols | 40 +++++++++++++++++++ ...ntEmitterPatternWithRecordOfFunction.types | 21 ++++++++++ ...eventEmitterPatternWithRecordOfFunction.ts | 12 ++++++ 4 files changed, 88 insertions(+) create mode 100644 tests/baselines/reference/eventEmitterPatternWithRecordOfFunction.js create mode 100644 tests/baselines/reference/eventEmitterPatternWithRecordOfFunction.symbols create mode 100644 tests/baselines/reference/eventEmitterPatternWithRecordOfFunction.types create mode 100644 tests/cases/compiler/eventEmitterPatternWithRecordOfFunction.ts diff --git a/tests/baselines/reference/eventEmitterPatternWithRecordOfFunction.js b/tests/baselines/reference/eventEmitterPatternWithRecordOfFunction.js new file mode 100644 index 00000000000..9fa1d2b3989 --- /dev/null +++ b/tests/baselines/reference/eventEmitterPatternWithRecordOfFunction.js @@ -0,0 +1,15 @@ +//// [eventEmitterPatternWithRecordOfFunction.ts] +interface A { + emit(event: string, ...args: any[]): boolean; +} + +type Args = F extends (...args: infer A) => void ? A : never; + +type EventMap = Record; + +interface B extends A { + emit(event: Event, ...args: Args): boolean; +} + +//// [eventEmitterPatternWithRecordOfFunction.js] +"use strict"; diff --git a/tests/baselines/reference/eventEmitterPatternWithRecordOfFunction.symbols b/tests/baselines/reference/eventEmitterPatternWithRecordOfFunction.symbols new file mode 100644 index 00000000000..003cb298e18 --- /dev/null +++ b/tests/baselines/reference/eventEmitterPatternWithRecordOfFunction.symbols @@ -0,0 +1,40 @@ +=== tests/cases/compiler/eventEmitterPatternWithRecordOfFunction.ts === +interface A { +>A : Symbol(A, Decl(eventEmitterPatternWithRecordOfFunction.ts, 0, 0)) + + emit(event: string, ...args: any[]): boolean; +>emit : Symbol(A.emit, Decl(eventEmitterPatternWithRecordOfFunction.ts, 0, 13)) +>event : Symbol(event, Decl(eventEmitterPatternWithRecordOfFunction.ts, 1, 9)) +>args : Symbol(args, Decl(eventEmitterPatternWithRecordOfFunction.ts, 1, 23)) +} + +type Args = F extends (...args: infer A) => void ? A : never; +>Args : Symbol(Args, Decl(eventEmitterPatternWithRecordOfFunction.ts, 2, 1)) +>F : Symbol(F, Decl(eventEmitterPatternWithRecordOfFunction.ts, 4, 10)) +>F : Symbol(F, Decl(eventEmitterPatternWithRecordOfFunction.ts, 4, 10)) +>args : Symbol(args, Decl(eventEmitterPatternWithRecordOfFunction.ts, 4, 26)) +>A : Symbol(A, Decl(eventEmitterPatternWithRecordOfFunction.ts, 4, 40)) +>A : Symbol(A, Decl(eventEmitterPatternWithRecordOfFunction.ts, 4, 40)) + +type EventMap = Record; +>EventMap : Symbol(EventMap, Decl(eventEmitterPatternWithRecordOfFunction.ts, 4, 64)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) +>Function : Symbol(Function, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) + +interface B extends A { +>B : Symbol(B, Decl(eventEmitterPatternWithRecordOfFunction.ts, 6, 41)) +>M : Symbol(M, Decl(eventEmitterPatternWithRecordOfFunction.ts, 8, 12)) +>EventMap : Symbol(EventMap, Decl(eventEmitterPatternWithRecordOfFunction.ts, 4, 64)) +>A : Symbol(A, Decl(eventEmitterPatternWithRecordOfFunction.ts, 0, 0)) + + emit(event: Event, ...args: Args): boolean; +>emit : Symbol(B.emit, Decl(eventEmitterPatternWithRecordOfFunction.ts, 8, 43)) +>Event : Symbol(Event, Decl(eventEmitterPatternWithRecordOfFunction.ts, 9, 9)) +>M : Symbol(M, Decl(eventEmitterPatternWithRecordOfFunction.ts, 8, 12)) +>event : Symbol(event, Decl(eventEmitterPatternWithRecordOfFunction.ts, 9, 32)) +>Event : Symbol(Event, Decl(eventEmitterPatternWithRecordOfFunction.ts, 9, 9)) +>args : Symbol(args, Decl(eventEmitterPatternWithRecordOfFunction.ts, 9, 45)) +>Args : Symbol(Args, Decl(eventEmitterPatternWithRecordOfFunction.ts, 2, 1)) +>M : Symbol(M, Decl(eventEmitterPatternWithRecordOfFunction.ts, 8, 12)) +>Event : Symbol(Event, Decl(eventEmitterPatternWithRecordOfFunction.ts, 9, 9)) +} diff --git a/tests/baselines/reference/eventEmitterPatternWithRecordOfFunction.types b/tests/baselines/reference/eventEmitterPatternWithRecordOfFunction.types new file mode 100644 index 00000000000..d2d1895780f --- /dev/null +++ b/tests/baselines/reference/eventEmitterPatternWithRecordOfFunction.types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/eventEmitterPatternWithRecordOfFunction.ts === +interface A { + emit(event: string, ...args: any[]): boolean; +>emit : (event: string, ...args: any[]) => boolean +>event : string +>args : any[] +} + +type Args = F extends (...args: infer A) => void ? A : never; +>Args : Args +>args : A + +type EventMap = Record; +>EventMap : Record + +interface B extends A { + emit(event: Event, ...args: Args): boolean; +>emit : (event: Event, ...args: Args) => boolean +>event : Event +>args : Args +} diff --git a/tests/cases/compiler/eventEmitterPatternWithRecordOfFunction.ts b/tests/cases/compiler/eventEmitterPatternWithRecordOfFunction.ts new file mode 100644 index 00000000000..389b0553b22 --- /dev/null +++ b/tests/cases/compiler/eventEmitterPatternWithRecordOfFunction.ts @@ -0,0 +1,12 @@ +// @strict: true +interface A { + emit(event: string, ...args: any[]): boolean; +} + +type Args = F extends (...args: infer A) => void ? A : never; + +type EventMap = Record; + +interface B extends A { + emit(event: Event, ...args: Args): boolean; +} \ No newline at end of file