diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 6fd6651f103..300b3d74295 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1606,7 +1606,12 @@ namespace ts { : (type).intrinsicName); } else if (type.flags & TypeFlags.ThisType) { - writer.writeKeyword(inObjectTypeLiteral ? "any" : "this"); + if (inObjectTypeLiteral && globalFlags & TypeFormatFlags.RewriteInaccessibleThis) { + writeType((type).constraint, flags); + } + else { + writer.writeKeyword("this"); + } } else if (type.flags & TypeFlags.Reference) { writeTypeReference(type, flags); @@ -14674,17 +14679,17 @@ namespace ts { ? getTypeOfSymbol(symbol) : unknownType; - getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags); + getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags | TypeFormatFlags.RewriteInaccessibleThis); } function writeReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter) { let signature = getSignatureFromDeclaration(signatureDeclaration); - getSymbolDisplayBuilder().buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags); + getSymbolDisplayBuilder().buildTypeDisplay(getReturnTypeOfSignature(signature), writer, enclosingDeclaration, flags | TypeFormatFlags.RewriteInaccessibleThis); } function writeTypeOfExpression(expr: Expression, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter) { let type = getTypeOfExpression(expr); - getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags); + getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags | TypeFormatFlags.RewriteInaccessibleThis); } function hasGlobalName(name: string): boolean { diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 83253a61d31..0a4f125db85 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -1509,6 +1509,7 @@ namespace ts { WriteTypeArgumentsOfSignature = 0x00000020, // Write the type arguments instead of type parameters of the signature InElementType = 0x00000040, // Writing an array or union element type UseFullyQualifiedType = 0x00000080, // Write out the fully qualified type name (eg. Module.Type, instead of Type) + RewriteInaccessibleThis = 0x00000100, // Rewrite references to inaccessible "this" } export const enum SymbolFormatFlags {