Skip to content

Commit 9ce544e

Browse files
committed
Handle the scenario when heritage clause of interface is not entity name expression
Fixes #12291
1 parent 30fde91 commit 9ce544e

4 files changed

+35
-1
lines changed

Diff for: src/compiler/declarationEmitter.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1143,7 +1143,10 @@ namespace ts {
11431143
const prevEnclosingDeclaration = enclosingDeclaration;
11441144
enclosingDeclaration = node;
11451145
emitTypeParameters(node.typeParameters);
1146-
emitHeritageClause(getInterfaceBaseTypeNodes(node), /*isImplementsList*/ false);
1146+
const interfaceExtendsTypes = filter(getInterfaceBaseTypeNodes(node), base => isEntityNameExpression(base.expression));
1147+
if (interfaceExtendsTypes && interfaceExtendsTypes.length) {
1148+
emitHeritageClause(interfaceExtendsTypes, /*isImplementsList*/ false);
1149+
}
11471150
write(" {");
11481151
writeLine();
11491152
increaseIndent();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
tests/cases/compiler/declarationEmitInterfaceWithNonEntityNameExpressionHeritage.ts(3,25): error TS2499: An interface can only extend an identifier/qualified-name with optional type arguments.
2+
3+
4+
==== tests/cases/compiler/declarationEmitInterfaceWithNonEntityNameExpressionHeritage.ts (1 errors) ====
5+
6+
class A { }
7+
interface Class extends (typeof A) { }
8+
~~~~~~~~~~
9+
!!! error TS2499: An interface can only extend an identifier/qualified-name with optional type arguments.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//// [declarationEmitInterfaceWithNonEntityNameExpressionHeritage.ts]
2+
3+
class A { }
4+
interface Class extends (typeof A) { }
5+
6+
//// [declarationEmitInterfaceWithNonEntityNameExpressionHeritage.js]
7+
var A = (function () {
8+
function A() {
9+
}
10+
return A;
11+
}());
12+
13+
14+
//// [declarationEmitInterfaceWithNonEntityNameExpressionHeritage.d.ts]
15+
declare class A {
16+
}
17+
interface Class {
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// @declaration: true
2+
3+
class A { }
4+
interface Class extends (typeof A) { }

0 commit comments

Comments
 (0)