fix export class declare with name object targeting es5 (#17494)

This commit is contained in:
kingwl
2017-10-17 10:48:21 +08:00
committed by 王文璐
parent dd6dc5e27a
commit cb2be44d02
39 changed files with 257 additions and 0 deletions

View File

@@ -24153,6 +24153,16 @@ namespace ts {
}
}
/**
* The name cannot be used as 'Object' of user defined types with special target.
*/
function checkClassNameCollisionWithObject(name: Identifier): void {
if (languageVersion === ScriptTarget.ES5 && name.escapedText === "Object"
&& moduleKind !== ModuleKind.ES2015 && moduleKind !== ModuleKind.ESNext) {
error(name, Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_with_module_0, ModuleKind[moduleKind]); // https://github.com/Microsoft/TypeScript/issues/17494
}
}
/**
* Check each type parameter and check that type parameters have no duplicate type parameter declarations
*/
@@ -24279,8 +24289,10 @@ namespace ts {
checkTypeNameIsReserved(node.name, Diagnostics.Class_name_cannot_be_0);
checkCollisionWithRequireExportsInGeneratedCode(node, node.name);
checkCollisionWithGlobalPromiseInGeneratedCode(node, node.name);
checkClassNameCollisionWithObject(node.name);
}
checkTypeParameters(getEffectiveTypeParameterDeclarations(node));
checkTypeParameters(node.typeParameters);
checkExportsOnMergedDeclarations(node);
const symbol = getSymbolOfNode(node);
const type = <InterfaceType>getDeclaredTypeOfSymbol(symbol);

View File

@@ -2357,6 +2357,11 @@
"category": "Error",
"code": 2724
},
"Class name cannot be 'Object' when targeting ES5 with module {0}.": {
"category": "Error",
"code": 2725
},
"Import declaration '{0}' is using private name '{1}'.": {
"category": "Error",
"code": 4000