Skip to content

Commit 7a2b2ce

Browse files
mprobstweswigham
authored andcommitted
Do not emit code for @extends tags in JS. (#29244)
When transpiling JavaScript, TS3.1+ emits `@extends` tags as code. E.g. /** @extends {SuperClass} */ class SubClass {} Causes an ES5 emit that references SuperClass: /** * @extends {SomeBase} */ var SubClass = /** @Class */ (function (_super) { __extends(SubClass, _super); function SubClass() { return _super !== null && _super.apply(this, arguments) || this; } return SubClass; }(SomeBase)); Note the literal references to `SomeBase`. This appears to be an accidental effect of 0f55566. It refactored `getEffectiveBaseTypeNode` for type checking, but missed an instance where it is also used for emit logic. This change fixes the problem by specifically getting the heritage clauses directly off the AST. Change-Id: I3128a757e5924e2528c61230a90ac13650852542
1 parent b7d7d5f commit 7a2b2ce

File tree

5 files changed

+48
-1
lines changed

5 files changed

+48
-1
lines changed

src/compiler/transformers/es2015.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,7 @@ namespace ts {
780780
enableSubstitutionsForBlockScopedBindings();
781781
}
782782

783-
const extendsClauseElement = getEffectiveBaseTypeNode(node);
783+
const extendsClauseElement = getClassExtendsHeritageElement(node);
784784
const classFunction = createFunctionExpression(
785785
/*modifiers*/ undefined,
786786
/*asteriskToken*/ undefined,
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//// [extendsJavaScript.js]
2+
/**
3+
* @extends {SomeBase}
4+
*/
5+
class MyClass {
6+
7+
}
8+
9+
10+
//// [extendsJavaScript.js]
11+
/**
12+
* @extends {SomeBase}
13+
*/
14+
var MyClass = /** @class */ (function () {
15+
function MyClass() {
16+
}
17+
return MyClass;
18+
}());
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
=== tests/cases/compiler/extendsJavaScript.js ===
2+
/**
3+
* @extends {SomeBase}
4+
*/
5+
class MyClass {
6+
>MyClass : Symbol(MyClass, Decl(extendsJavaScript.js, 0, 0))
7+
8+
}
9+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
=== tests/cases/compiler/extendsJavaScript.js ===
2+
/**
3+
* @extends {SomeBase}
4+
*/
5+
class MyClass {
6+
>MyClass : MyClass
7+
8+
}
9+
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// @allowJs: true
2+
// @checkJs: false
3+
// @outDir: ./out
4+
// @filename: extendsJavaScript.js
5+
6+
/**
7+
* @extends {SomeBase}
8+
*/
9+
class MyClass {
10+
11+
}

0 commit comments

Comments
 (0)