@@ -52,6 +52,7 @@ namespace ts {
5252 let enclosingDeclaration : Node ;
5353 let currentSourceFile : SourceFile ;
5454 let reportedDeclarationError = false ;
55+ let errorNameNode : DeclarationName ;
5556 let emitJsDocComments = compilerOptions . removeComments ? function ( declaration : Node ) { } : writeJsDocComments ;
5657 let emit = compilerOptions . stripInternal ? stripInternal : emitNode ;
5758
@@ -152,6 +153,7 @@ namespace ts {
152153 function createAndSetNewTextWriterWithSymbolWriter ( ) : EmitTextWriterWithSymbolWriter {
153154 let writer = < EmitTextWriterWithSymbolWriter > createTextWriter ( newLine ) ;
154155 writer . trackSymbol = trackSymbol ;
156+ writer . reportInaccessibleThisError = reportInaccessibleThisError ;
155157 writer . writeKeyword = writer . write ;
156158 writer . writeOperator = writer . write ;
157159 writer . writePunctuation = writer . write ;
@@ -257,6 +259,13 @@ namespace ts {
257259 handleSymbolAccessibilityError ( resolver . isSymbolAccessible ( symbol , enclosingDeclaration , meaning ) ) ;
258260 }
259261
262+ function reportInaccessibleThisError ( ) {
263+ if ( errorNameNode ) {
264+ diagnostics . push ( createDiagnosticForNode ( errorNameNode , Diagnostics . The_inferred_type_of_0_references_an_inaccessible_this_type_A_type_annotation_is_necessary ,
265+ declarationNameToString ( errorNameNode ) ) ) ;
266+ }
267+ }
268+
260269 function writeTypeOfDeclaration ( declaration : AccessorDeclaration | VariableLikeDeclaration , type : TypeNode , getSymbolAccessibilityDiagnostic : GetSymbolAccessibilityDiagnostic ) {
261270 writer . getSymbolAccessibilityDiagnostic = getSymbolAccessibilityDiagnostic ;
262271 write ( ": " ) ;
@@ -265,7 +274,9 @@ namespace ts {
265274 emitType ( type ) ;
266275 }
267276 else {
277+ errorNameNode = declaration . name ;
268278 resolver . writeTypeOfDeclaration ( declaration , enclosingDeclaration , TypeFormatFlags . UseTypeOfFunction , writer ) ;
279+ errorNameNode = undefined ;
269280 }
270281 }
271282
@@ -277,7 +288,9 @@ namespace ts {
277288 emitType ( signature . type ) ;
278289 }
279290 else {
291+ errorNameNode = signature . name ;
280292 resolver . writeReturnTypeOfSignatureDeclaration ( signature , enclosingDeclaration , TypeFormatFlags . UseTypeOfFunction , writer ) ;
293+ errorNameNode = undefined ;
281294 }
282295 }
283296
0 commit comments