Merge pull request #29102 from Microsoft/declarationEmitForDefaultExportClassExtendingExpression
Declaration emit for default exported class extending expression
This commit is contained in:
commit
ab2a38ebef
|
@ -1100,7 +1100,8 @@ namespace ts {
|
|||
if (extendsClause && !isEntityNameExpression(extendsClause.expression) && extendsClause.expression.kind !== SyntaxKind.NullKeyword) {
|
||||
// We must add a temporary declaration for the extends clause expression
|
||||
|
||||
const newId = createOptimisticUniqueName(`${unescapeLeadingUnderscores(input.name!.escapedText)}_base`); // TODO: GH#18217
|
||||
const oldId = input.name ? unescapeLeadingUnderscores(input.name.escapedText) : "default";
|
||||
const newId = createOptimisticUniqueName(`${oldId}_base`);
|
||||
getSymbolAccessibilityDiagnostic = () => ({
|
||||
diagnosticMessage: Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1,
|
||||
errorNode: extendsClause,
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
//// [declarationEmitForDefaultExportClassExtendingExpression01.ts]
|
||||
interface Greeter {
|
||||
getGreeting(): string;
|
||||
}
|
||||
|
||||
interface GreeterConstructor {
|
||||
new (): Greeter;
|
||||
}
|
||||
|
||||
class A {
|
||||
getGreeting() {
|
||||
return 'hello';
|
||||
}
|
||||
}
|
||||
|
||||
const getGreeterBase = (): GreeterConstructor => A;
|
||||
|
||||
export default class extends getGreeterBase() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
//// [declarationEmitForDefaultExportClassExtendingExpression01.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 (b.hasOwnProperty(p)) d[p] = b[p]; };
|
||||
return extendStatics(d, b);
|
||||
};
|
||||
return function (d, b) {
|
||||
extendStatics(d, b);
|
||||
function __() { this.constructor = d; }
|
||||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
||||
};
|
||||
})();
|
||||
exports.__esModule = true;
|
||||
var A = /** @class */ (function () {
|
||||
function A() {
|
||||
}
|
||||
A.prototype.getGreeting = function () {
|
||||
return 'hello';
|
||||
};
|
||||
return A;
|
||||
}());
|
||||
var getGreeterBase = function () { return A; };
|
||||
var default_1 = /** @class */ (function (_super) {
|
||||
__extends(default_1, _super);
|
||||
function default_1() {
|
||||
return _super !== null && _super.apply(this, arguments) || this;
|
||||
}
|
||||
return default_1;
|
||||
}(getGreeterBase()));
|
||||
exports["default"] = default_1;
|
||||
|
||||
|
||||
//// [declarationEmitForDefaultExportClassExtendingExpression01.d.ts]
|
||||
interface Greeter {
|
||||
getGreeting(): string;
|
||||
}
|
||||
interface GreeterConstructor {
|
||||
new (): Greeter;
|
||||
}
|
||||
declare const default_base: GreeterConstructor;
|
||||
export default class extends default_base {
|
||||
}
|
||||
export {};
|
|
@ -0,0 +1,35 @@
|
|||
=== tests/cases/compiler/declarationEmitForDefaultExportClassExtendingExpression01.ts ===
|
||||
interface Greeter {
|
||||
>Greeter : Symbol(Greeter, Decl(declarationEmitForDefaultExportClassExtendingExpression01.ts, 0, 0))
|
||||
|
||||
getGreeting(): string;
|
||||
>getGreeting : Symbol(Greeter.getGreeting, Decl(declarationEmitForDefaultExportClassExtendingExpression01.ts, 0, 19))
|
||||
}
|
||||
|
||||
interface GreeterConstructor {
|
||||
>GreeterConstructor : Symbol(GreeterConstructor, Decl(declarationEmitForDefaultExportClassExtendingExpression01.ts, 2, 1))
|
||||
|
||||
new (): Greeter;
|
||||
>Greeter : Symbol(Greeter, Decl(declarationEmitForDefaultExportClassExtendingExpression01.ts, 0, 0))
|
||||
}
|
||||
|
||||
class A {
|
||||
>A : Symbol(A, Decl(declarationEmitForDefaultExportClassExtendingExpression01.ts, 6, 1))
|
||||
|
||||
getGreeting() {
|
||||
>getGreeting : Symbol(A.getGreeting, Decl(declarationEmitForDefaultExportClassExtendingExpression01.ts, 8, 9))
|
||||
|
||||
return 'hello';
|
||||
}
|
||||
}
|
||||
|
||||
const getGreeterBase = (): GreeterConstructor => A;
|
||||
>getGreeterBase : Symbol(getGreeterBase, Decl(declarationEmitForDefaultExportClassExtendingExpression01.ts, 14, 5))
|
||||
>GreeterConstructor : Symbol(GreeterConstructor, Decl(declarationEmitForDefaultExportClassExtendingExpression01.ts, 2, 1))
|
||||
>A : Symbol(A, Decl(declarationEmitForDefaultExportClassExtendingExpression01.ts, 6, 1))
|
||||
|
||||
export default class extends getGreeterBase() {
|
||||
>getGreeterBase : Symbol(getGreeterBase, Decl(declarationEmitForDefaultExportClassExtendingExpression01.ts, 14, 5))
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
=== tests/cases/compiler/declarationEmitForDefaultExportClassExtendingExpression01.ts ===
|
||||
interface Greeter {
|
||||
getGreeting(): string;
|
||||
>getGreeting : () => string
|
||||
}
|
||||
|
||||
interface GreeterConstructor {
|
||||
new (): Greeter;
|
||||
}
|
||||
|
||||
class A {
|
||||
>A : A
|
||||
|
||||
getGreeting() {
|
||||
>getGreeting : () => string
|
||||
|
||||
return 'hello';
|
||||
>'hello' : "hello"
|
||||
}
|
||||
}
|
||||
|
||||
const getGreeterBase = (): GreeterConstructor => A;
|
||||
>getGreeterBase : () => GreeterConstructor
|
||||
>(): GreeterConstructor => A : () => GreeterConstructor
|
||||
>A : typeof A
|
||||
|
||||
export default class extends getGreeterBase() {
|
||||
>getGreeterBase() : Greeter
|
||||
>getGreeterBase : () => GreeterConstructor
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
// @declaration: true
|
||||
|
||||
interface Greeter {
|
||||
getGreeting(): string;
|
||||
}
|
||||
|
||||
interface GreeterConstructor {
|
||||
new (): Greeter;
|
||||
}
|
||||
|
||||
class A {
|
||||
getGreeting() {
|
||||
return 'hello';
|
||||
}
|
||||
}
|
||||
|
||||
const getGreeterBase = (): GreeterConstructor => A;
|
||||
|
||||
export default class extends getGreeterBase() {
|
||||
}
|
||||
|
Loading…
Reference in a new issue