Skip to content

Commit ddb7bb2

Browse files
authored
Add regression test for GH microsoft#21871 (microsoft#22733)
1 parent b518120 commit ddb7bb2

4 files changed

Lines changed: 198 additions & 0 deletions

File tree

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
//// [tests/cases/compiler/amdDeclarationEmitNoExtraDeclare.ts] ////
2+
3+
//// [Class.ts]
4+
import { Configurable } from "./Configurable"
5+
6+
export class HiddenClass {}
7+
8+
export class ActualClass extends Configurable(HiddenClass) {}
9+
//// [Configurable.ts]
10+
export type Constructor<T> = {
11+
new(...args: any[]): T;
12+
}
13+
export function Configurable<T extends Constructor<{}>>(base: T): T {
14+
return class extends base {
15+
16+
constructor(...args: any[]) {
17+
super(...args);
18+
}
19+
20+
};
21+
}
22+
23+
24+
//// [dist.js]
25+
var __extends = (this && this.__extends) || (function () {
26+
var extendStatics = Object.setPrototypeOf ||
27+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
28+
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
29+
return function (d, b) {
30+
extendStatics(d, b);
31+
function __() { this.constructor = d; }
32+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
33+
};
34+
})();
35+
define("Configurable", ["require", "exports"], function (require, exports) {
36+
"use strict";
37+
exports.__esModule = true;
38+
function Configurable(base) {
39+
return /** @class */ (function (_super) {
40+
__extends(class_1, _super);
41+
function class_1() {
42+
var args = [];
43+
for (var _i = 0; _i < arguments.length; _i++) {
44+
args[_i] = arguments[_i];
45+
}
46+
return _super.apply(this, args) || this;
47+
}
48+
return class_1;
49+
}(base));
50+
}
51+
exports.Configurable = Configurable;
52+
});
53+
define("Class", ["require", "exports", "Configurable"], function (require, exports, Configurable_1) {
54+
"use strict";
55+
exports.__esModule = true;
56+
var HiddenClass = /** @class */ (function () {
57+
function HiddenClass() {
58+
}
59+
return HiddenClass;
60+
}());
61+
exports.HiddenClass = HiddenClass;
62+
var ActualClass = /** @class */ (function (_super) {
63+
__extends(ActualClass, _super);
64+
function ActualClass() {
65+
return _super !== null && _super.apply(this, arguments) || this;
66+
}
67+
return ActualClass;
68+
}(Configurable_1.Configurable(HiddenClass)));
69+
exports.ActualClass = ActualClass;
70+
});
71+
72+
73+
//// [dist.d.ts]
74+
declare module "Configurable" {
75+
export type Constructor<T> = {
76+
new (...args: any[]): T;
77+
};
78+
export function Configurable<T extends Constructor<{}>>(base: T): T;
79+
}
80+
declare module "Class" {
81+
export class HiddenClass {
82+
}
83+
const ActualClass_base: typeof HiddenClass;
84+
export class ActualClass extends ActualClass_base {
85+
}
86+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
=== tests/cases/compiler/Class.ts ===
2+
import { Configurable } from "./Configurable"
3+
>Configurable : Symbol(Configurable, Decl(Class.ts, 0, 8))
4+
5+
export class HiddenClass {}
6+
>HiddenClass : Symbol(HiddenClass, Decl(Class.ts, 0, 45))
7+
8+
export class ActualClass extends Configurable(HiddenClass) {}
9+
>ActualClass : Symbol(ActualClass, Decl(Class.ts, 2, 27))
10+
>Configurable : Symbol(Configurable, Decl(Class.ts, 0, 8))
11+
>HiddenClass : Symbol(HiddenClass, Decl(Class.ts, 0, 45))
12+
13+
=== tests/cases/compiler/Configurable.ts ===
14+
export type Constructor<T> = {
15+
>Constructor : Symbol(Constructor, Decl(Configurable.ts, 0, 0))
16+
>T : Symbol(T, Decl(Configurable.ts, 0, 24))
17+
18+
new(...args: any[]): T;
19+
>args : Symbol(args, Decl(Configurable.ts, 1, 8))
20+
>T : Symbol(T, Decl(Configurable.ts, 0, 24))
21+
}
22+
export function Configurable<T extends Constructor<{}>>(base: T): T {
23+
>Configurable : Symbol(Configurable, Decl(Configurable.ts, 2, 1))
24+
>T : Symbol(T, Decl(Configurable.ts, 3, 29))
25+
>Constructor : Symbol(Constructor, Decl(Configurable.ts, 0, 0))
26+
>base : Symbol(base, Decl(Configurable.ts, 3, 56))
27+
>T : Symbol(T, Decl(Configurable.ts, 3, 29))
28+
>T : Symbol(T, Decl(Configurable.ts, 3, 29))
29+
30+
return class extends base {
31+
>base : Symbol(base, Decl(Configurable.ts, 3, 56))
32+
33+
constructor(...args: any[]) {
34+
>args : Symbol(args, Decl(Configurable.ts, 6, 20))
35+
36+
super(...args);
37+
>super : Symbol(T, Decl(Configurable.ts, 3, 29))
38+
>args : Symbol(args, Decl(Configurable.ts, 6, 20))
39+
}
40+
41+
};
42+
}
43+
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
=== tests/cases/compiler/Class.ts ===
2+
import { Configurable } from "./Configurable"
3+
>Configurable : <T extends new (...args: any[]) => {}>(base: T) => T
4+
5+
export class HiddenClass {}
6+
>HiddenClass : HiddenClass
7+
8+
export class ActualClass extends Configurable(HiddenClass) {}
9+
>ActualClass : ActualClass
10+
>Configurable(HiddenClass) : HiddenClass
11+
>Configurable : <T extends new (...args: any[]) => {}>(base: T) => T
12+
>HiddenClass : typeof HiddenClass
13+
14+
=== tests/cases/compiler/Configurable.ts ===
15+
export type Constructor<T> = {
16+
>Constructor : Constructor<T>
17+
>T : T
18+
19+
new(...args: any[]): T;
20+
>args : any[]
21+
>T : T
22+
}
23+
export function Configurable<T extends Constructor<{}>>(base: T): T {
24+
>Configurable : <T extends Constructor<{}>>(base: T) => T
25+
>T : T
26+
>Constructor : Constructor<T>
27+
>base : T
28+
>T : T
29+
>T : T
30+
31+
return class extends base {
32+
>class extends base { constructor(...args: any[]) { super(...args); } } : { new (...args: any[]): (Anonymous class); prototype: Configurable<any>.(Anonymous class); } & T
33+
>base : {}
34+
35+
constructor(...args: any[]) {
36+
>args : any[]
37+
38+
super(...args);
39+
>super(...args) : void
40+
>super : T
41+
>...args : any
42+
>args : any[]
43+
}
44+
45+
};
46+
}
47+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// @declaration: true
2+
// @module: amd
3+
// @out: dist.js
4+
// @filename: Class.ts
5+
import { Configurable } from "./Configurable"
6+
7+
export class HiddenClass {}
8+
9+
export class ActualClass extends Configurable(HiddenClass) {}
10+
// @filename: Configurable.ts
11+
export type Constructor<T> = {
12+
new(...args: any[]): T;
13+
}
14+
export function Configurable<T extends Constructor<{}>>(base: T): T {
15+
return class extends base {
16+
17+
constructor(...args: any[]) {
18+
super(...args);
19+
}
20+
21+
};
22+
}

0 commit comments

Comments
 (0)