@@ -2993,7 +2993,7 @@ namespace ts {
29932993 }
29942994 }
29952995
2996- function typeToString(type: Type, enclosingDeclaration?: Node, flags: TypeFormatFlags = TypeFormatFlags.AllowUniqueESSymbolType, writer: EmitTextWriter = createTextWriter("")): string {
2996+ function typeToString(type: Type, enclosingDeclaration?: Node, flags: TypeFormatFlags = TypeFormatFlags.AllowUniqueESSymbolType | TypeFormatFlags.UseAliasDefinedOutsideCurrentScope , writer: EmitTextWriter = createTextWriter("")): string {
29972997 const typeNode = nodeBuilder.typeToTypeNode(type, enclosingDeclaration, toNodeBuilderFlags(flags) | NodeBuilderFlags.IgnoreErrors, writer);
29982998 if (typeNode === undefined) return Debug.fail("should always get typenode");
29992999 const options = { removeComments: true };
@@ -3941,7 +3941,7 @@ namespace ts {
39413941 }
39423942 }
39433943
3944- function typePredicateToString(typePredicate: TypePredicate, enclosingDeclaration?: Node, flags? : TypeFormatFlags, writer?: EmitTextWriter): string {
3944+ function typePredicateToString(typePredicate: TypePredicate, enclosingDeclaration?: Node, flags: TypeFormatFlags = TypeFormatFlags.UseAliasDefinedOutsideCurrentScope , writer?: EmitTextWriter): string {
39453945 return writer ? typePredicateToStringWorker(writer).getText() : usingSingleLineStringWriter(typePredicateToStringWorker);
39463946
39473947 function typePredicateToStringWorker(writer: EmitTextWriter) {
@@ -24153,6 +24153,16 @@ namespace ts {
2415324153 }
2415424154 }
2415524155
24156+ /**
24157+ * The name cannot be used as 'Object' of user defined types with special target.
24158+ */
24159+ function checkClassNameCollisionWithObject(name: Identifier): void {
24160+ if (languageVersion === ScriptTarget.ES5 && name.escapedText === "Object"
24161+ && moduleKind !== ModuleKind.ES2015 && moduleKind !== ModuleKind.ESNext) {
24162+ error(name, Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_with_module_0, ModuleKind[moduleKind]); // https://github.com/Microsoft/TypeScript/issues/17494
24163+ }
24164+ }
24165+
2415624166 /**
2415724167 * Check each type parameter and check that type parameters have no duplicate type parameter declarations
2415824168 */
@@ -24279,6 +24289,9 @@ namespace ts {
2427924289 checkTypeNameIsReserved(node.name, Diagnostics.Class_name_cannot_be_0);
2428024290 checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
2428124291 checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
24292+ if (!(node.flags & NodeFlags.Ambient)) {
24293+ checkClassNameCollisionWithObject(node.name);
24294+ }
2428224295 }
2428324296 checkTypeParameters(getEffectiveTypeParameterDeclarations(node));
2428424297 checkExportsOnMergedDeclarations(node);
@@ -24489,7 +24502,7 @@ namespace ts {
2448924502 continue;
2449024503 }
2449124504
24492- if (isPrototypeProperty(base) && isPrototypeProperty(derived) || base.flags & SymbolFlags.PropertyOrAccessor && derived.flags & SymbolFlags.PropertyOrAccessor) {
24505+ if (isPrototypeProperty(base) || base.flags & SymbolFlags.PropertyOrAccessor && derived.flags & SymbolFlags.PropertyOrAccessor) {
2449324506 // method is overridden with method or property/accessor is overridden with property/accessor - correct case
2449424507 continue;
2449524508 }
0 commit comments