@@ -617,7 +617,7 @@ namespace ts {
617617 if ( ! noDeclare ) {
618618 write ( "declare " ) ;
619619 }
620- write ( "var " ) ;
620+ write ( "const " ) ;
621621 write ( tempVarName ) ;
622622 write ( ": " ) ;
623623 writer . getSymbolAccessibilityDiagnostic = ( ) => diagnostic ;
@@ -1096,7 +1096,7 @@ namespace ts {
10961096 }
10971097 }
10981098
1099- function emitHeritageClause ( className : Identifier , typeReferences : ExpressionWithTypeArguments [ ] , isImplementsList : boolean ) {
1099+ function emitHeritageClause ( typeReferences : ExpressionWithTypeArguments [ ] , isImplementsList : boolean ) {
11001100 if ( typeReferences ) {
11011101 write ( isImplementsList ? " implements " : " extends " ) ;
11021102 emitCommaList ( typeReferences , emitTypeOfTypeReference ) ;
@@ -1109,16 +1109,6 @@ namespace ts {
11091109 else if ( ! isImplementsList && node . expression . kind === SyntaxKind . NullKeyword ) {
11101110 write ( "null" ) ;
11111111 }
1112- else {
1113- writer . getSymbolAccessibilityDiagnostic = getHeritageClauseVisibilityError ;
1114- errorNameNode = className ;
1115- resolver . writeBaseConstructorTypeOfClass (
1116- enclosingDeclaration as ClassLikeDeclaration ,
1117- enclosingDeclaration ,
1118- TypeFormatFlags . UseTypeOfFunction | TypeFormatFlags . UseTypeAliasValue ,
1119- writer ) ;
1120- errorNameNode = undefined ;
1121- }
11221112
11231113 function getHeritageClauseVisibilityError ( ) : SymbolAccessibilityDiagnostic {
11241114 let diagnosticMessage : DiagnosticMessage ;
@@ -1158,12 +1148,14 @@ namespace ts {
11581148 enclosingDeclaration = node ;
11591149 const baseTypeNode = getClassExtendsHeritageClauseElement ( node ) ;
11601150 let tempVarName : string ;
1161- if ( isNonNullExpression ( baseTypeNode ) ) {
1162- tempVarName = emitTempVariableDeclaration ( baseTypeNode . expression , `_${ node . name . text } _intersection_base` , {
1163- diagnosticMessage : Diagnostics . extends_clause_of_exported_class_0_has_or_is_using_private_name_1 ,
1164- errorNode : baseTypeNode ,
1165- typeName : node . name
1166- } ) ;
1151+ if ( baseTypeNode && ! isEntityNameExpression ( baseTypeNode . expression ) ) {
1152+ tempVarName = baseTypeNode . expression . kind === SyntaxKind . NullKeyword ?
1153+ "null" :
1154+ emitTempVariableDeclaration ( baseTypeNode . expression , `${ node . name . text } _base` , {
1155+ diagnosticMessage : Diagnostics . extends_clause_of_exported_class_0_has_or_is_using_private_name_1 ,
1156+ errorNode : baseTypeNode ,
1157+ typeName : node . name
1158+ } ) ;
11671159 }
11681160
11691161 emitJsDocComments ( node ) ;
@@ -1175,7 +1167,7 @@ namespace ts {
11751167 writeTextOfNode ( currentText , node . name ) ;
11761168 emitTypeParameters ( node . typeParameters ) ;
11771169 if ( baseTypeNode ) {
1178- if ( isNonNullExpression ( baseTypeNode ) ) {
1170+ if ( ! isEntityNameExpression ( baseTypeNode . expression ) ) {
11791171 write ( " extends " ) ;
11801172 write ( tempVarName ) ;
11811173 if ( baseTypeNode . typeArguments ) {
@@ -1185,10 +1177,10 @@ namespace ts {
11851177 }
11861178 }
11871179 else {
1188- emitHeritageClause ( node . name , [ baseTypeNode ] , /*isImplementsList*/ false ) ;
1180+ emitHeritageClause ( [ baseTypeNode ] , /*isImplementsList*/ false ) ;
11891181 }
11901182 }
1191- emitHeritageClause ( node . name , getClassImplementsHeritageClauseElements ( node ) , /*isImplementsList*/ true ) ;
1183+ emitHeritageClause ( getClassImplementsHeritageClauseElements ( node ) , /*isImplementsList*/ true ) ;
11921184 write ( " {" ) ;
11931185 writeLine ( ) ;
11941186 increaseIndent ( ) ;
@@ -1210,7 +1202,7 @@ namespace ts {
12101202 emitTypeParameters ( node . typeParameters ) ;
12111203 const interfaceExtendsTypes = filter ( getInterfaceBaseTypeNodes ( node ) , base => isEntityNameExpression ( base . expression ) ) ;
12121204 if ( interfaceExtendsTypes && interfaceExtendsTypes . length ) {
1213- emitHeritageClause ( node . name , interfaceExtendsTypes , /*isImplementsList*/ false ) ;
1205+ emitHeritageClause ( interfaceExtendsTypes , /*isImplementsList*/ false ) ;
12141206 }
12151207 write ( " {" ) ;
12161208 writeLine ( ) ;
@@ -1222,10 +1214,6 @@ namespace ts {
12221214 enclosingDeclaration = prevEnclosingDeclaration ;
12231215 }
12241216
1225- function isNonNullExpression ( node : ExpressionWithTypeArguments ) {
1226- return node && ! isEntityNameExpression ( node . expression ) && node . expression . kind !== SyntaxKind . NullKeyword ;
1227- }
1228-
12291217 function emitPropertyDeclaration ( node : Declaration ) {
12301218 if ( hasDynamicName ( node ) ) {
12311219 return ;
0 commit comments