Skip to content

Commit 49bf50a

Browse files
committed
Add interesting test from other bug investigation
1 parent 83275d2 commit 49bf50a

File tree

4 files changed

+199
-0
lines changed

4 files changed

+199
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
//// [tests/cases/compiler/declarationEmitTypeParameterNameReusedInOverloads.ts] ////
2+
3+
//// [declarationEmitTypeParameterNameReusedInOverloads.ts]
4+
export class Base { foo: string; }
5+
export class Derived extends Base { bar: string; }
6+
export class Derived2 extends Derived { baz: string; }
7+
8+
export type Foo = {
9+
new (x: {
10+
new <T extends Derived>(a: T): T;
11+
new <T extends Base>(a: T): T;
12+
}): any[];
13+
new (x: {
14+
new <T extends Derived2>(a: T): T;
15+
new <T extends Base>(a: T): T;
16+
}): any[];
17+
}
18+
19+
20+
//// [declarationEmitTypeParameterNameReusedInOverloads.js]
21+
"use strict";
22+
var __extends = (this && this.__extends) || (function () {
23+
var extendStatics = function (d, b) {
24+
extendStatics = Object.setPrototypeOf ||
25+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
26+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
27+
return extendStatics(d, b);
28+
};
29+
return function (d, b) {
30+
if (typeof b !== "function" && b !== null)
31+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
32+
extendStatics(d, b);
33+
function __() { this.constructor = d; }
34+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
35+
};
36+
})();
37+
Object.defineProperty(exports, "__esModule", { value: true });
38+
exports.Derived2 = exports.Derived = exports.Base = void 0;
39+
var Base = /** @class */ (function () {
40+
function Base() {
41+
}
42+
return Base;
43+
}());
44+
exports.Base = Base;
45+
var Derived = /** @class */ (function (_super) {
46+
__extends(Derived, _super);
47+
function Derived() {
48+
return _super !== null && _super.apply(this, arguments) || this;
49+
}
50+
return Derived;
51+
}(Base));
52+
exports.Derived = Derived;
53+
var Derived2 = /** @class */ (function (_super) {
54+
__extends(Derived2, _super);
55+
function Derived2() {
56+
return _super !== null && _super.apply(this, arguments) || this;
57+
}
58+
return Derived2;
59+
}(Derived));
60+
exports.Derived2 = Derived2;
61+
62+
63+
//// [declarationEmitTypeParameterNameReusedInOverloads.d.ts]
64+
export declare class Base {
65+
foo: string;
66+
}
67+
export declare class Derived extends Base {
68+
bar: string;
69+
}
70+
export declare class Derived2 extends Derived {
71+
baz: string;
72+
}
73+
export type Foo = {
74+
new (x: {
75+
new <T extends Derived>(a: T): T;
76+
new <T extends Base>(a: T): T;
77+
}): any[];
78+
new (x: {
79+
new <T extends Derived2>(a: T): T;
80+
new <T extends Base>(a: T): T;
81+
}): any[];
82+
};
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
//// [tests/cases/compiler/declarationEmitTypeParameterNameReusedInOverloads.ts] ////
2+
3+
=== declarationEmitTypeParameterNameReusedInOverloads.ts ===
4+
export class Base { foo: string; }
5+
>Base : Symbol(Base, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 0))
6+
>foo : Symbol(Base.foo, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 19))
7+
8+
export class Derived extends Base { bar: string; }
9+
>Derived : Symbol(Derived, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 34))
10+
>Base : Symbol(Base, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 0))
11+
>bar : Symbol(Derived.bar, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 1, 35))
12+
13+
export class Derived2 extends Derived { baz: string; }
14+
>Derived2 : Symbol(Derived2, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 1, 50))
15+
>Derived : Symbol(Derived, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 34))
16+
>baz : Symbol(Derived2.baz, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 2, 39))
17+
18+
export type Foo = {
19+
>Foo : Symbol(Foo, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 2, 54))
20+
21+
new (x: {
22+
>x : Symbol(x, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 5, 9))
23+
24+
new <T extends Derived>(a: T): T;
25+
>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 6, 13))
26+
>Derived : Symbol(Derived, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 34))
27+
>a : Symbol(a, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 6, 32))
28+
>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 6, 13))
29+
>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 6, 13))
30+
31+
new <T extends Base>(a: T): T;
32+
>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 7, 13))
33+
>Base : Symbol(Base, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 0))
34+
>a : Symbol(a, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 7, 29))
35+
>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 7, 13))
36+
>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 7, 13))
37+
38+
}): any[];
39+
new (x: {
40+
>x : Symbol(x, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 9, 9))
41+
42+
new <T extends Derived2>(a: T): T;
43+
>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 10, 13))
44+
>Derived2 : Symbol(Derived2, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 1, 50))
45+
>a : Symbol(a, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 10, 33))
46+
>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 10, 13))
47+
>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 10, 13))
48+
49+
new <T extends Base>(a: T): T;
50+
>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 11, 17))
51+
>Base : Symbol(Base, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 0, 0))
52+
>a : Symbol(a, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 11, 33))
53+
>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 11, 17))
54+
>T : Symbol(T, Decl(declarationEmitTypeParameterNameReusedInOverloads.ts, 11, 17))
55+
56+
}): any[];
57+
}
58+
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//// [tests/cases/compiler/declarationEmitTypeParameterNameReusedInOverloads.ts] ////
2+
3+
=== declarationEmitTypeParameterNameReusedInOverloads.ts ===
4+
export class Base { foo: string; }
5+
>Base : Base
6+
>foo : string
7+
8+
export class Derived extends Base { bar: string; }
9+
>Derived : Derived
10+
>Base : Base
11+
>bar : string
12+
13+
export class Derived2 extends Derived { baz: string; }
14+
>Derived2 : Derived2
15+
>Derived : Derived
16+
>baz : string
17+
18+
export type Foo = {
19+
>Foo : { new (x: { new <T extends Derived>(a: T): T; new <T extends Base>(a: T): T; }): any[]; new (x: { new <T extends Derived2>(a: T): T; new <T extends Base>(a: T): T; }): any[]; }
20+
21+
new (x: {
22+
>x : { new <T extends Derived>(a: T): T; new <T extends Base>(a: T): T; }
23+
24+
new <T extends Derived>(a: T): T;
25+
>a : T
26+
27+
new <T extends Base>(a: T): T;
28+
>a : T
29+
30+
}): any[];
31+
new (x: {
32+
>x : { new <T extends Derived2>(a: T): T; new <T extends Base>(a: T): T; }
33+
34+
new <T extends Derived2>(a: T): T;
35+
>a : T
36+
37+
new <T extends Base>(a: T): T;
38+
>a : T
39+
40+
}): any[];
41+
}
42+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// @declaration: true
2+
// @skipLibCheck: false
3+
4+
export class Base { foo: string; }
5+
export class Derived extends Base { bar: string; }
6+
export class Derived2 extends Derived { baz: string; }
7+
8+
export type Foo = {
9+
new (x: {
10+
new <T extends Derived>(a: T): T;
11+
new <T extends Base>(a: T): T;
12+
}): any[];
13+
new (x: {
14+
new <T extends Derived2>(a: T): T;
15+
new <T extends Base>(a: T): T;
16+
}): any[];
17+
}

0 commit comments

Comments
 (0)