@@ -190,6 +190,7 @@ namespace ts {
190190 const writer = < EmitTextWriterWithSymbolWriter > createTextWriter ( newLine ) ;
191191 writer . trackSymbol = trackSymbol ;
192192 writer . reportInaccessibleThisError = reportInaccessibleThisError ;
193+ writer . reportIllegalExtends = reportIllegalExtends ;
193194 writer . writeKeyword = writer . write ;
194195 writer . writeOperator = writer . write ;
195196 writer . writePunctuation = writer . write ;
@@ -313,6 +314,14 @@ namespace ts {
313314 recordTypeReferenceDirectivesIfNecessary ( resolver . getTypeReferenceDirectivesForSymbol ( symbol , meaning ) ) ;
314315 }
315316
317+ function reportIllegalExtends ( ) {
318+ if ( errorNameNode ) {
319+ reportedDeclarationError = true ;
320+ emitterDiagnostics . add ( createDiagnosticForNode ( errorNameNode , Diagnostics . Extends_clause_of_exported_class_0_refers_to_a_type_with_no_declaration ,
321+ declarationNameToString ( errorNameNode ) ) ) ;
322+ }
323+ }
324+
316325 function reportInaccessibleThisError ( ) {
317326 if ( errorNameNode ) {
318327 reportedDeclarationError = true ;
@@ -1071,7 +1080,7 @@ namespace ts {
10711080 }
10721081 }
10731082
1074- function emitHeritageClause ( typeReferences : ExpressionWithTypeArguments [ ] , isImplementsList : boolean ) {
1083+ function emitHeritageClause ( className : Identifier , typeReferences : ExpressionWithTypeArguments [ ] , isImplementsList : boolean ) {
10751084 if ( typeReferences ) {
10761085 write ( isImplementsList ? " implements " : " extends " ) ;
10771086 emitCommaList ( typeReferences , emitTypeOfTypeReference ) ;
@@ -1086,7 +1095,9 @@ namespace ts {
10861095 }
10871096 else {
10881097 writer . getSymbolAccessibilityDiagnostic = getHeritageClauseVisibilityError ;
1098+ errorNameNode = className ;
10891099 resolver . writeBaseConstructorTypeOfClass ( < ClassLikeDeclaration > enclosingDeclaration , enclosingDeclaration , TypeFormatFlags . UseTypeOfFunction | TypeFormatFlags . UseTypeAliasValue , writer ) ;
1100+ errorNameNode = undefined ;
10901101 }
10911102
10921103 function getHeritageClauseVisibilityError ( ) : SymbolAccessibilityDiagnostic {
@@ -1136,9 +1147,10 @@ namespace ts {
11361147 emitTypeParameters ( node . typeParameters ) ;
11371148 const baseTypeNode = getClassExtendsHeritageClauseElement ( node ) ;
11381149 if ( baseTypeNode ) {
1139- emitHeritageClause ( [ baseTypeNode ] , /*isImplementsList*/ false ) ;
1150+ node . name
1151+ emitHeritageClause ( node . name , [ baseTypeNode ] , /*isImplementsList*/ false ) ;
11401152 }
1141- emitHeritageClause ( getClassImplementsHeritageClauseElements ( node ) , /*isImplementsList*/ true ) ;
1153+ emitHeritageClause ( node . name , getClassImplementsHeritageClauseElements ( node ) , /*isImplementsList*/ true ) ;
11421154 write ( " {" ) ;
11431155 writeLine ( ) ;
11441156 increaseIndent ( ) ;
@@ -1160,7 +1172,7 @@ namespace ts {
11601172 emitTypeParameters ( node . typeParameters ) ;
11611173 const interfaceExtendsTypes = filter ( getInterfaceBaseTypeNodes ( node ) , base => isEntityNameExpression ( base . expression ) ) ;
11621174 if ( interfaceExtendsTypes && interfaceExtendsTypes . length ) {
1163- emitHeritageClause ( interfaceExtendsTypes , /*isImplementsList*/ false ) ;
1175+ emitHeritageClause ( node . name , interfaceExtendsTypes , /*isImplementsList*/ false ) ;
11641176 }
11651177 write ( " {" ) ;
11661178 writeLine ( ) ;
0 commit comments