From b178e66efe66fe7070807b8bb32fad72da702c44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Sat, 26 Aug 2023 00:33:12 +0200 Subject: [PATCH] Add a test case with a generic member call returning a closed over object --- ...lOnMemberReturningClosedOverObject.symbols | 37 +++++++++++++++++ ...allOnMemberReturningClosedOverObject.types | 41 +++++++++++++++++++ ...icCallOnMemberReturningClosedOverObject.ts | 14 +++++++ 3 files changed, 92 insertions(+) create mode 100644 tests/baselines/reference/genericCallOnMemberReturningClosedOverObject.symbols create mode 100644 tests/baselines/reference/genericCallOnMemberReturningClosedOverObject.types create mode 100644 tests/cases/compiler/genericCallOnMemberReturningClosedOverObject.ts diff --git a/tests/baselines/reference/genericCallOnMemberReturningClosedOverObject.symbols b/tests/baselines/reference/genericCallOnMemberReturningClosedOverObject.symbols new file mode 100644 index 0000000000000..9c47ba6396f68 --- /dev/null +++ b/tests/baselines/reference/genericCallOnMemberReturningClosedOverObject.symbols @@ -0,0 +1,37 @@ +//// [tests/cases/compiler/genericCallOnMemberReturningClosedOverObject.ts] //// + +=== genericCallOnMemberReturningClosedOverObject.ts === +// https://github.com/microsoft/TypeScript/issues/11584 + +function example() { +>example : Symbol(example, Decl(genericCallOnMemberReturningClosedOverObject.ts, 0, 0)) +>T1 : Symbol(T1, Decl(genericCallOnMemberReturningClosedOverObject.ts, 2, 17)) + + let x = { +>x : Symbol(x, Decl(genericCallOnMemberReturningClosedOverObject.ts, 3, 5)) + + foo: (t2: T2) => x, +>foo : Symbol(foo, Decl(genericCallOnMemberReturningClosedOverObject.ts, 3, 11)) +>T2 : Symbol(T2, Decl(genericCallOnMemberReturningClosedOverObject.ts, 4, 10)) +>t2 : Symbol(t2, Decl(genericCallOnMemberReturningClosedOverObject.ts, 4, 14)) +>T2 : Symbol(T2, Decl(genericCallOnMemberReturningClosedOverObject.ts, 4, 10)) +>x : Symbol(x, Decl(genericCallOnMemberReturningClosedOverObject.ts, 3, 5)) + + bar: (t1: T1) => x, +>bar : Symbol(bar, Decl(genericCallOnMemberReturningClosedOverObject.ts, 4, 27)) +>t1 : Symbol(t1, Decl(genericCallOnMemberReturningClosedOverObject.ts, 5, 10)) +>T1 : Symbol(T1, Decl(genericCallOnMemberReturningClosedOverObject.ts, 2, 17)) +>x : Symbol(x, Decl(genericCallOnMemberReturningClosedOverObject.ts, 3, 5)) + + }; + return x; +>x : Symbol(x, Decl(genericCallOnMemberReturningClosedOverObject.ts, 3, 5)) +} + +example().foo("hello").bar(1); +>example().foo("hello").bar : Symbol(bar, Decl(genericCallOnMemberReturningClosedOverObject.ts, 4, 27)) +>example().foo : Symbol(foo, Decl(genericCallOnMemberReturningClosedOverObject.ts, 3, 11)) +>example : Symbol(example, Decl(genericCallOnMemberReturningClosedOverObject.ts, 0, 0)) +>foo : Symbol(foo, Decl(genericCallOnMemberReturningClosedOverObject.ts, 3, 11)) +>bar : Symbol(bar, Decl(genericCallOnMemberReturningClosedOverObject.ts, 4, 27)) + diff --git a/tests/baselines/reference/genericCallOnMemberReturningClosedOverObject.types b/tests/baselines/reference/genericCallOnMemberReturningClosedOverObject.types new file mode 100644 index 0000000000000..73fe6c0db0db5 --- /dev/null +++ b/tests/baselines/reference/genericCallOnMemberReturningClosedOverObject.types @@ -0,0 +1,41 @@ +//// [tests/cases/compiler/genericCallOnMemberReturningClosedOverObject.ts] //// + +=== genericCallOnMemberReturningClosedOverObject.ts === +// https://github.com/microsoft/TypeScript/issues/11584 + +function example() { +>example : () => { foo: (t2: T2) => any; bar: (t1: T1) => any; } + + let x = { +>x : { foo: (t2: T2) => any; bar: (t1: T1) => any; } +>{ foo: (t2: T2) => x, bar: (t1: T1) => x, } : { foo: (t2: T2) => any; bar: (t1: T1) => any; } + + foo: (t2: T2) => x, +>foo : (t2: T2) => { foo: any; bar: (t1: T1) => any; } +>(t2: T2) => x : (t2: T2) => { foo: any; bar: (t1: T1) => any; } +>t2 : T2 +>x : { foo: (t2: T2) => any; bar: (t1: T1) => any; } + + bar: (t1: T1) => x, +>bar : (t1: T1) => { foo: (t2: T2) => any; bar: any; } +>(t1: T1) => x : (t1: T1) => { foo: (t2: T2) => any; bar: any; } +>t1 : T1 +>x : { foo: (t2: T2) => any; bar: (t1: T1) => any; } + + }; + return x; +>x : { foo: (t2: T2) => any; bar: (t1: T1) => any; } +} + +example().foo("hello").bar(1); +>example().foo("hello").bar(1) : { foo: (t2: T2) => any; bar: (t1: number) => any; } +>example().foo("hello").bar : (t1: number) => { foo: (t2: T2) => any; bar: any; } +>example().foo("hello") : { foo: (t2: T2) => any; bar: (t1: number) => any; } +>example().foo : (t2: T2) => { foo: any; bar: (t1: number) => any; } +>example() : { foo: (t2: T2) => any; bar: (t1: number) => any; } +>example : () => { foo: (t2: T2) => any; bar: (t1: T1) => any; } +>foo : (t2: T2) => { foo: any; bar: (t1: number) => any; } +>"hello" : "hello" +>bar : (t1: number) => { foo: (t2: T2) => any; bar: any; } +>1 : 1 + diff --git a/tests/cases/compiler/genericCallOnMemberReturningClosedOverObject.ts b/tests/cases/compiler/genericCallOnMemberReturningClosedOverObject.ts new file mode 100644 index 0000000000000..f4f39357c6df6 --- /dev/null +++ b/tests/cases/compiler/genericCallOnMemberReturningClosedOverObject.ts @@ -0,0 +1,14 @@ +// @strict: true +// @noEmit: true + +// https://github.com/microsoft/TypeScript/issues/11584 + +function example() { + let x = { + foo: (t2: T2) => x, + bar: (t1: T1) => x, + }; + return x; +} + +example().foo("hello").bar(1);