From a1df1aee226a2611a5dcb396bcdbac74fae04095 Mon Sep 17 00:00:00 2001
From: Jake Bailey <5341706+jakebailey@users.noreply.github.com>
Date: Thu, 7 Sep 2023 22:19:26 -0700
Subject: [PATCH 1/6] Add test
---
...rationEmitTypeParameterNameInOuterScope.js | 43 +++++++++++++++
...nEmitTypeParameterNameInOuterScope.symbols | 52 +++++++++++++++++++
...ionEmitTypeParameterNameInOuterScope.types | 44 ++++++++++++++++
...rationEmitTypeParameterNameInOuterScope.ts | 16 ++++++
4 files changed, 155 insertions(+)
create mode 100644 tests/baselines/reference/declarationEmitTypeParameterNameInOuterScope.js
create mode 100644 tests/baselines/reference/declarationEmitTypeParameterNameInOuterScope.symbols
create mode 100644 tests/baselines/reference/declarationEmitTypeParameterNameInOuterScope.types
create mode 100644 tests/cases/compiler/declarationEmitTypeParameterNameInOuterScope.ts
diff --git a/tests/baselines/reference/declarationEmitTypeParameterNameInOuterScope.js b/tests/baselines/reference/declarationEmitTypeParameterNameInOuterScope.js
new file mode 100644
index 0000000000000..bddfc9a119a89
--- /dev/null
+++ b/tests/baselines/reference/declarationEmitTypeParameterNameInOuterScope.js
@@ -0,0 +1,43 @@
+//// [tests/cases/compiler/declarationEmitTypeParameterNameInOuterScope.ts] ////
+
+//// [declarationEmitTypeParameterNameInOuterScope.ts]
+class A { }
+
+var a = (x: A) => x;
+function a2(x: A) { return x }
+
+var a3 = (x: A) => new A();
+function a4(x: A) { return new A() }
+
+
+interface B { }
+
+var b = (x: B) => x;
+function b2(x: B) { return x }
+
+
+//// [declarationEmitTypeParameterNameInOuterScope.js]
+var A = /** @class */ (function () {
+ function A() {
+ }
+ return A;
+}());
+var a = function (x) { return x; };
+function a2(x) { return x; }
+var a3 = function (x) { return new A(); };
+function a4(x) { return new A(); }
+var b = function (x) { return x; };
+function b2(x) { return x; }
+
+
+//// [declarationEmitTypeParameterNameInOuterScope.d.ts]
+declare class A {
+}
+declare var a: (x: A_1) => A_1;
+declare function a2(x: A): A;
+declare var a3: (x: A_1) => A;
+declare function a4(x: A): globalThis.A;
+interface B {
+}
+declare var b: (x: B_1) => B_1;
+declare function b2(x: B): B;
diff --git a/tests/baselines/reference/declarationEmitTypeParameterNameInOuterScope.symbols b/tests/baselines/reference/declarationEmitTypeParameterNameInOuterScope.symbols
new file mode 100644
index 0000000000000..4605797b8547b
--- /dev/null
+++ b/tests/baselines/reference/declarationEmitTypeParameterNameInOuterScope.symbols
@@ -0,0 +1,52 @@
+//// [tests/cases/compiler/declarationEmitTypeParameterNameInOuterScope.ts] ////
+
+=== declarationEmitTypeParameterNameInOuterScope.ts ===
+class A { }
+>A : Symbol(A, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 0, 0))
+
+var a = (x: A) => x;
+>a : Symbol(a, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 2, 3))
+>A : Symbol(A, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 2, 9))
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 2, 13))
+>A : Symbol(A, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 2, 9))
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 2, 13))
+
+function a2(x: A) { return x }
+>a2 : Symbol(a2, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 2, 24))
+>A : Symbol(A, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 3, 12))
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 3, 16))
+>A : Symbol(A, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 3, 12))
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 3, 16))
+
+var a3 = (x: A) => new A();
+>a3 : Symbol(a3, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 5, 3))
+>A : Symbol(A, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 5, 10))
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 5, 14))
+>A : Symbol(A, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 5, 10))
+>A : Symbol(A, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 0, 0))
+
+function a4(x: A) { return new A() }
+>a4 : Symbol(a4, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 5, 31))
+>A : Symbol(A, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 6, 12))
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 6, 16))
+>A : Symbol(A, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 6, 12))
+>A : Symbol(A, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 0, 0))
+
+
+interface B { }
+>B : Symbol(B, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 6, 40))
+
+var b = (x: B) => x;
+>b : Symbol(b, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 11, 3))
+>B : Symbol(B, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 11, 9))
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 11, 13))
+>B : Symbol(B, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 11, 9))
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 11, 13))
+
+function b2(x: B) { return x }
+>b2 : Symbol(b2, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 11, 24))
+>B : Symbol(B, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 12, 12))
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 12, 16))
+>B : Symbol(B, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 12, 12))
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameInOuterScope.ts, 12, 16))
+
diff --git a/tests/baselines/reference/declarationEmitTypeParameterNameInOuterScope.types b/tests/baselines/reference/declarationEmitTypeParameterNameInOuterScope.types
new file mode 100644
index 0000000000000..018e04b6d7ee7
--- /dev/null
+++ b/tests/baselines/reference/declarationEmitTypeParameterNameInOuterScope.types
@@ -0,0 +1,44 @@
+//// [tests/cases/compiler/declarationEmitTypeParameterNameInOuterScope.ts] ////
+
+=== declarationEmitTypeParameterNameInOuterScope.ts ===
+class A { }
+>A : A
+
+var a = (x: A) => x;
+>a : (x: A_1) => A_1
+>(x: A) => x : (x: A_1) => A_1
+>x : A
+>x : A
+
+function a2(x: A) { return x }
+>a2 : (x: A) => A
+>x : A
+>x : A
+
+var a3 = (x: A) => new A();
+>a3 : (x: A_1) => A
+>(x: A) => new A() : (x: A_1) => A
+>x : A
+>new A() : globalThis.A
+>A : typeof A
+
+function a4(x: A) { return new A() }
+>a4 : (x: A) => globalThis.A
+>x : A
+>new A() : globalThis.A
+>A : typeof A
+
+
+interface B { }
+
+var b = (x: B) => x;
+>b : (x: B_1) => B_1
+>(x: B) => x : (x: B_1) => B_1
+>x : B
+>x : B
+
+function b2(x: B) { return x }
+>b2 : (x: B) => B
+>x : B
+>x : B
+
diff --git a/tests/cases/compiler/declarationEmitTypeParameterNameInOuterScope.ts b/tests/cases/compiler/declarationEmitTypeParameterNameInOuterScope.ts
new file mode 100644
index 0000000000000..10e18f43d4d84
--- /dev/null
+++ b/tests/cases/compiler/declarationEmitTypeParameterNameInOuterScope.ts
@@ -0,0 +1,16 @@
+// @declaration: true
+// @skipLibCheck: false
+
+class A { }
+
+var a = (x: A) => x;
+function a2(x: A) { return x }
+
+var a3 = (x: A) => new A();
+function a4(x: A) { return new A() }
+
+
+interface B { }
+
+var b = (x: B) => x;
+function b2(x: B) { return x }
From ae910313e5f660c25dd2c25003ee69353a7606ac Mon Sep 17 00:00:00 2001
From: Jake Bailey <5341706+jakebailey@users.noreply.github.com>
Date: Thu, 21 Sep 2023 19:06:15 -0700
Subject: [PATCH 2/6] Add interesting test from other bug investigation
---
...nEmitTypeParameterNameReusedInOverloads.js | 82 +++++++++++++++++++
...TypeParameterNameReusedInOverloads.symbols | 58 +++++++++++++
...itTypeParameterNameReusedInOverloads.types | 42 ++++++++++
...nEmitTypeParameterNameReusedInOverloads.ts | 17 ++++
4 files changed, 199 insertions(+)
create mode 100644 tests/baselines/reference/declarationEmitTypeParameterNameReusedInOverloads.js
create mode 100644 tests/baselines/reference/declarationEmitTypeParameterNameReusedInOverloads.symbols
create mode 100644 tests/baselines/reference/declarationEmitTypeParameterNameReusedInOverloads.types
create mode 100644 tests/cases/compiler/declarationEmitTypeParameterNameReusedInOverloads.ts
diff --git a/tests/baselines/reference/declarationEmitTypeParameterNameReusedInOverloads.js b/tests/baselines/reference/declarationEmitTypeParameterNameReusedInOverloads.js
new file mode 100644
index 0000000000000..7cb7af37bd3a2
--- /dev/null
+++ b/tests/baselines/reference/declarationEmitTypeParameterNameReusedInOverloads.js
@@ -0,0 +1,82 @@
+//// [tests/cases/compiler/declarationEmitTypeParameterNameReusedInOverloads.ts] ////
+
+//// [declarationEmitTypeParameterNameReusedInOverloads.ts]
+export class Base { foo: string; }
+export class Derived extends Base { bar: string; }
+export class Derived2 extends Derived { baz: string; }
+
+export type Foo = {
+ new (x: {
+ new (a: T): T;
+ new (a: T): T;
+ }): any[];
+ new (x: {
+ new (a: T): T;
+ new (a: T): T;
+ }): any[];
+}
+
+
+//// [declarationEmitTypeParameterNameReusedInOverloads.js]
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ };
+ return function (d, b) {
+ if (typeof b !== "function" && b !== null)
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Derived2 = exports.Derived = exports.Base = void 0;
+var Base = /** @class */ (function () {
+ function Base() {
+ }
+ return Base;
+}());
+exports.Base = Base;
+var Derived = /** @class */ (function (_super) {
+ __extends(Derived, _super);
+ function Derived() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ return Derived;
+}(Base));
+exports.Derived = Derived;
+var Derived2 = /** @class */ (function (_super) {
+ __extends(Derived2, _super);
+ function Derived2() {
+ return _super !== null && _super.apply(this, arguments) || this;
+ }
+ return Derived2;
+}(Derived));
+exports.Derived2 = Derived2;
+
+
+//// [declarationEmitTypeParameterNameReusedInOverloads.d.ts]
+export declare class Base {
+ foo: string;
+}
+export declare class Derived extends Base {
+ bar: string;
+}
+export declare class Derived2 extends Derived {
+ baz: string;
+}
+export type Foo = {
+ new (x: {
+ new (a: T): T;
+ new (a: T): T;
+ }): any[];
+ new (x: {
+ new (a: T): T;
+ new (a: T): T;
+ }): any[];
+};
diff --git a/tests/baselines/reference/declarationEmitTypeParameterNameReusedInOverloads.symbols b/tests/baselines/reference/declarationEmitTypeParameterNameReusedInOverloads.symbols
new file mode 100644
index 0000000000000..2f803de250dc7
--- /dev/null
+++ b/tests/baselines/reference/declarationEmitTypeParameterNameReusedInOverloads.symbols
@@ -0,0 +1,58 @@
+//// [tests/cases/compiler/declarationEmitTypeParameterNameReusedInOverloads.ts] ////
+
+=== declarationEmitTypeParameterNameReusedInOverloads.ts ===
+export class Base { foo: string; }
+>Base : Symbol(Base, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 0))
+>foo : Symbol(Base.foo, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 19))
+
+export class Derived extends Base { bar: string; }
+>Derived : Symbol(Derived, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 34))
+>Base : Symbol(Base, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 0))
+>bar : Symbol(Derived.bar, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 1, 35))
+
+export class Derived2 extends Derived { baz: string; }
+>Derived2 : Symbol(Derived2, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 1, 50))
+>Derived : Symbol(Derived, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 34))
+>baz : Symbol(Derived2.baz, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 2, 39))
+
+export type Foo = {
+>Foo : Symbol(Foo, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 2, 54))
+
+ new (x: {
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 5, 9))
+
+ new (a: T): T;
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 6, 13))
+>Derived : Symbol(Derived, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 34))
+>a : Symbol(a, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 6, 32))
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 6, 13))
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 6, 13))
+
+ new (a: T): T;
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 7, 13))
+>Base : Symbol(Base, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 0))
+>a : Symbol(a, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 7, 29))
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 7, 13))
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 7, 13))
+
+ }): any[];
+ new (x: {
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 9, 9))
+
+ new (a: T): T;
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 10, 13))
+>Derived2 : Symbol(Derived2, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 1, 50))
+>a : Symbol(a, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 10, 33))
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 10, 13))
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 10, 13))
+
+ new (a: T): T;
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 11, 17))
+>Base : Symbol(Base, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 0))
+>a : Symbol(a, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 11, 33))
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 11, 17))
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 11, 17))
+
+ }): any[];
+}
+
diff --git a/tests/baselines/reference/declarationEmitTypeParameterNameReusedInOverloads.types b/tests/baselines/reference/declarationEmitTypeParameterNameReusedInOverloads.types
new file mode 100644
index 0000000000000..e6cc3fc829bd6
--- /dev/null
+++ b/tests/baselines/reference/declarationEmitTypeParameterNameReusedInOverloads.types
@@ -0,0 +1,42 @@
+//// [tests/cases/compiler/declarationEmitTypeParameterNameReusedInOverloads.ts] ////
+
+=== declarationEmitTypeParameterNameReusedInOverloads.ts ===
+export class Base { foo: string; }
+>Base : Base
+>foo : string
+
+export class Derived extends Base { bar: string; }
+>Derived : Derived
+>Base : Base
+>bar : string
+
+export class Derived2 extends Derived { baz: string; }
+>Derived2 : Derived2
+>Derived : Derived
+>baz : string
+
+export type Foo = {
+>Foo : { new (x: { new (a: T): T; new (a: T_1): T_1; }): any[]; new (x: { new (a: T_2): T_2; new (a: T_3): T_3; }): any[]; }
+
+ new (x: {
+>x : { new (a: T): T; new (a: T_1): T_1; }
+
+ new (a: T): T;
+>a : T
+
+ new (a: T): T;
+>a : T
+
+ }): any[];
+ new (x: {
+>x : { new (a: T): T; new (a: T_1): T_1; }
+
+ new (a: T): T;
+>a : T
+
+ new (a: T): T;
+>a : T
+
+ }): any[];
+}
+
diff --git a/tests/cases/compiler/declarationEmitTypeParameterNameReusedInOverloads.ts b/tests/cases/compiler/declarationEmitTypeParameterNameReusedInOverloads.ts
new file mode 100644
index 0000000000000..a30b54eef5adc
--- /dev/null
+++ b/tests/cases/compiler/declarationEmitTypeParameterNameReusedInOverloads.ts
@@ -0,0 +1,17 @@
+// @declaration: true
+// @skipLibCheck: false
+
+export class Base { foo: string; }
+export class Derived extends Base { bar: string; }
+export class Derived2 extends Derived { baz: string; }
+
+export type Foo = {
+ new (x: {
+ new (a: T): T;
+ new (a: T): T;
+ }): any[];
+ new (x: {
+ new (a: T): T;
+ new (a: T): T;
+ }): any[];
+}
From d8caed42be1ee227f37c5941329e33e8fa46eec2 Mon Sep 17 00:00:00 2001
From: Jake Bailey <5341706+jakebailey@users.noreply.github.com>
Date: Sun, 24 Sep 2023 15:27:18 -0700
Subject: [PATCH 3/6] Add new test case which breaks with this code
---
...EmitTypeParameterNameShadowedInternally.js | 22 +++++++++++++++++++
...ypeParameterNameShadowedInternally.symbols | 22 +++++++++++++++++++
...tTypeParameterNameShadowedInternally.types | 21 ++++++++++++++++++
...EmitTypeParameterNameShadowedInternally.ts | 7 ++++++
4 files changed, 72 insertions(+)
create mode 100644 tests/baselines/reference/declarationEmitTypeParameterNameShadowedInternally.js
create mode 100644 tests/baselines/reference/declarationEmitTypeParameterNameShadowedInternally.symbols
create mode 100644 tests/baselines/reference/declarationEmitTypeParameterNameShadowedInternally.types
create mode 100644 tests/cases/compiler/declarationEmitTypeParameterNameShadowedInternally.ts
diff --git a/tests/baselines/reference/declarationEmitTypeParameterNameShadowedInternally.js b/tests/baselines/reference/declarationEmitTypeParameterNameShadowedInternally.js
new file mode 100644
index 0000000000000..ebc5136e73979
--- /dev/null
+++ b/tests/baselines/reference/declarationEmitTypeParameterNameShadowedInternally.js
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/declarationEmitTypeParameterNameShadowedInternally.ts] ////
+
+//// [declarationEmitTypeParameterNameShadowedInternally.ts]
+export const foo = (x: T) => {
+ const inner = (y: T) => [x, y] as const;
+ return inner;
+}
+
+
+//// [declarationEmitTypeParameterNameShadowedInternally.js]
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.foo = void 0;
+var foo = function (x) {
+ var inner = function (y) { return [x, y]; };
+ return inner;
+};
+exports.foo = foo;
+
+
+//// [declarationEmitTypeParameterNameShadowedInternally.d.ts]
+export declare const foo: (x: T) => (y: T_1) => readonly [T, T_1];
diff --git a/tests/baselines/reference/declarationEmitTypeParameterNameShadowedInternally.symbols b/tests/baselines/reference/declarationEmitTypeParameterNameShadowedInternally.symbols
new file mode 100644
index 0000000000000..09b0c3cb3f18f
--- /dev/null
+++ b/tests/baselines/reference/declarationEmitTypeParameterNameShadowedInternally.symbols
@@ -0,0 +1,22 @@
+//// [tests/cases/compiler/declarationEmitTypeParameterNameShadowedInternally.ts] ////
+
+=== declarationEmitTypeParameterNameShadowedInternally.ts ===
+export const foo = (x: T) => {
+>foo : Symbol(foo, Decl(declarationEmitTypeParameterNameShadowedInternally.ts, 0, 12))
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameShadowedInternally.ts, 0, 20))
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameShadowedInternally.ts, 0, 24))
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameShadowedInternally.ts, 0, 20))
+
+ const inner = (y: T) => [x, y] as const;
+>inner : Symbol(inner, Decl(declarationEmitTypeParameterNameShadowedInternally.ts, 1, 6))
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameShadowedInternally.ts, 1, 16))
+>y : Symbol(y, Decl(declarationEmitTypeParameterNameShadowedInternally.ts, 1, 20))
+>T : Symbol(T, Decl(declarationEmitTypeParameterNameShadowedInternally.ts, 1, 16))
+>x : Symbol(x, Decl(declarationEmitTypeParameterNameShadowedInternally.ts, 0, 24))
+>y : Symbol(y, Decl(declarationEmitTypeParameterNameShadowedInternally.ts, 1, 20))
+>const : Symbol(const)
+
+ return inner;
+>inner : Symbol(inner, Decl(declarationEmitTypeParameterNameShadowedInternally.ts, 1, 6))
+}
+
diff --git a/tests/baselines/reference/declarationEmitTypeParameterNameShadowedInternally.types b/tests/baselines/reference/declarationEmitTypeParameterNameShadowedInternally.types
new file mode 100644
index 0000000000000..5c47cb56446fe
--- /dev/null
+++ b/tests/baselines/reference/declarationEmitTypeParameterNameShadowedInternally.types
@@ -0,0 +1,21 @@
+//// [tests/cases/compiler/declarationEmitTypeParameterNameShadowedInternally.ts] ////
+
+=== declarationEmitTypeParameterNameShadowedInternally.ts ===
+export const foo = (x: T) => {
+>foo : (x: T) => (y: T_1) => readonly [T, T_1]
+>(x: T) => { const inner = (y: T) => [x, y] as const; return inner;} : (x: T) => (y: T_1) => readonly [T, T_1]
+>x : T
+
+ const inner = (y: T) => [x, y] as const;
+>inner : (y: T_1) => readonly [T, T_1]
+>(y: T) => [x, y] as const : (y: T_1) => readonly [T, T_1]
+>y : T
+>[x, y] as const : readonly [T_1, T]
+>[x, y] : readonly [T_1, T]
+>x : T_1
+>y : T
+
+ return inner;
+>inner : (y: T_1) => readonly [T, T_1]
+}
+
diff --git a/tests/cases/compiler/declarationEmitTypeParameterNameShadowedInternally.ts b/tests/cases/compiler/declarationEmitTypeParameterNameShadowedInternally.ts
new file mode 100644
index 0000000000000..2c0b6bffd7fe8
--- /dev/null
+++ b/tests/cases/compiler/declarationEmitTypeParameterNameShadowedInternally.ts
@@ -0,0 +1,7 @@
+// @declaration: true
+// @skipLibCheck: false
+
+export const foo = (x: T) => {
+ const inner = (y: T) => [x, y] as const;
+ return inner;
+}
From d13fa9495cd51b086842b77685f054b5cfb81127 Mon Sep 17 00:00:00 2001
From: Jake Bailey <5341706+jakebailey@users.noreply.github.com>
Date: Mon, 9 Oct 2023 14:13:25 -0700
Subject: [PATCH 4/6] Add test case from PR 56046
Co-authored-by: Wesley Wigham
---
...clarationEmitReusesLambdaParameterNodes.js | 27 ++++++++++++++
...tionEmitReusesLambdaParameterNodes.symbols | 37 +++++++++++++++++++
...rationEmitReusesLambdaParameterNodes.types | 24 ++++++++++++
...clarationEmitReusesLambdaParameterNodes.ts | 12 ++++++
4 files changed, 100 insertions(+)
create mode 100644 tests/baselines/reference/declarationEmitReusesLambdaParameterNodes.js
create mode 100644 tests/baselines/reference/declarationEmitReusesLambdaParameterNodes.symbols
create mode 100644 tests/baselines/reference/declarationEmitReusesLambdaParameterNodes.types
create mode 100644 tests/cases/compiler/declarationEmitReusesLambdaParameterNodes.ts
diff --git a/tests/baselines/reference/declarationEmitReusesLambdaParameterNodes.js b/tests/baselines/reference/declarationEmitReusesLambdaParameterNodes.js
new file mode 100644
index 0000000000000..7f3aa10fc2c0d
--- /dev/null
+++ b/tests/baselines/reference/declarationEmitReusesLambdaParameterNodes.js
@@ -0,0 +1,27 @@
+//// [tests/cases/compiler/declarationEmitReusesLambdaParameterNodes.ts] ////
+
+//// [index.d.ts]
+export type Whatever = {x: string, y: number};
+export type Props = Omit & Partial & T;
+
+//// [index.ts]
+import { Props } from "react-select";
+
+export const CustomSelect1 =