diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 494570c85c1..81baf3313f9 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -539,7 +539,7 @@ module ts { bindChildren(node, 0, /*isBlockScopeContainer*/ false); break; case SyntaxKind.ExportAssignment: - if ((node).expression && (node).expression.kind === SyntaxKind.Identifier) { + if ((node).expression.kind === SyntaxKind.Identifier) { // An export default clause with an identifier exports all meanings of that identifier declareSymbol(container.symbol.exports, container.symbol, node, SymbolFlags.Alias, SymbolFlags.PropertyExcludes | SymbolFlags.AliasExcludes); } diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ea38a8f4b31..dc635abf4a4 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -682,7 +682,7 @@ module ts { } function getTargetOfExportAssignment(node: ExportAssignment): Symbol { - return node.expression && resolveEntityName(node.expression, SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace); + return resolveEntityName(node.expression, SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace); } function getTargetOfAliasDeclaration(node: Declaration): Symbol { @@ -748,7 +748,7 @@ module ts { if (!links.referenced) { links.referenced = true; let node = getDeclarationOfAliasSymbol(symbol); - if (node.kind === SyntaxKind.ExportAssignment && (node).expression) { + if (node.kind === SyntaxKind.ExportAssignment) { // export default checkExpressionCached((node).expression); } @@ -2287,16 +2287,7 @@ module ts { } // Handle export default expressions if (declaration.kind === SyntaxKind.ExportAssignment) { - var exportAssignment = declaration; - if (exportAssignment.expression) { - return links.type = checkExpression(exportAssignment.expression); - } - else if (exportAssignment.type) { - return links.type = getTypeFromTypeNodeOrHeritageClauseElement(exportAssignment.type); - } - else { - return links.type = anyType; - } + return links.type = checkExpression((declaration).expression); } // Handle variable, parameter or property links.type = resolvingType; @@ -10599,21 +10590,12 @@ module ts { if (!checkGrammarDecorators(node) && !checkGrammarModifiers(node) && (node.flags & NodeFlags.Modifier)) { grammarErrorOnFirstToken(node, Diagnostics.An_export_assignment_cannot_have_modifiers); } - if (node.expression) { - if (node.expression.kind === SyntaxKind.Identifier) { - markExportAsReferenced(node); - } - else { - checkExpressionCached(node.expression); - } + if (node.expression.kind === SyntaxKind.Identifier) { + markExportAsReferenced(node); } - if (node.type) { - checkSourceElement(node.type); - if (!isInAmbientContext(node)) { - grammarErrorOnFirstToken(node.type, Diagnostics.A_type_annotation_on_an_export_statement_is_only_allowed_in_an_ambient_external_module_declaration); - } + else { + checkExpressionCached(node.expression); } - checkExternalModuleExports(container); if (node.isExportEquals && languageVersion >= ScriptTarget.ES6) { diff --git a/src/compiler/diagnosticInformationMap.generated.ts b/src/compiler/diagnosticInformationMap.generated.ts index 5062be5ed46..d3af14a8e25 100644 --- a/src/compiler/diagnosticInformationMap.generated.ts +++ b/src/compiler/diagnosticInformationMap.generated.ts @@ -158,7 +158,6 @@ module ts { An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive: { code: 1198, category: DiagnosticCategory.Error, key: "An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive." }, Unterminated_Unicode_escape_sequence: { code: 1199, category: DiagnosticCategory.Error, key: "Unterminated Unicode escape sequence." }, Line_terminator_not_permitted_before_arrow: { code: 1200, category: DiagnosticCategory.Error, key: "Line terminator not permitted before arrow." }, - A_type_annotation_on_an_export_statement_is_only_allowed_in_an_ambient_external_module_declaration: { code: 1201, category: DiagnosticCategory.Error, key: "A type annotation on an export statement is only allowed in an ambient external module declaration." }, Import_assignment_cannot_be_used_when_targeting_ECMAScript_6_or_higher_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_or_import_d_from_mod_instead: { code: 1202, category: DiagnosticCategory.Error, key: "Import assignment cannot be used when targeting ECMAScript 6 or higher. Consider using 'import * as ns from \"mod\"', 'import {a} from \"mod\"' or 'import d from \"mod\"' instead." }, Export_assignment_cannot_be_used_when_targeting_ECMAScript_6_or_higher_Consider_using_export_default_instead: { code: 1203, category: DiagnosticCategory.Error, key: "Export assignment cannot be used when targeting ECMAScript 6 or higher. Consider using 'export default' instead." }, Cannot_compile_external_modules_into_amd_or_commonjs_when_targeting_es6_or_higher: { code: 1204, category: DiagnosticCategory.Error, key: "Cannot compile external modules into amd or commonjs when targeting es6 or higher." }, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 4476b0cad4a..34f4b542ad4 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -623,10 +623,6 @@ "category": "Error", "code": 1200 }, - "A type annotation on an export statement is only allowed in an ambient external module declaration.": { - "category": "Error", - "code": 1201 - }, "Import assignment cannot be used when targeting ECMAScript 6 or higher. Consider using 'import * as ns from \"mod\"', 'import {a} from \"mod\"' or 'import d from \"mod\"' instead.": { "category": "Error", "code": 1202 diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index bde4cec3f3f..202e35ba34d 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -299,8 +299,7 @@ module ts { case SyntaxKind.ExportAssignment: return visitNodes(cbNodes, node.decorators) || visitNodes(cbNodes, node.modifiers) || - visitNode(cbNode, (node).expression) || - visitNode(cbNode, (node).type); + visitNode(cbNode, (node).expression); case SyntaxKind.TemplateExpression: return visitNode(cbNode, (node).head) || visitNodes(cbNodes, (node).templateSpans); case SyntaxKind.TemplateSpan: @@ -5123,17 +5122,11 @@ module ts { setModifiers(node, modifiers); if (parseOptional(SyntaxKind.EqualsToken)) { node.isExportEquals = true; - node.expression = parseAssignmentExpressionOrHigher(); } else { parseExpected(SyntaxKind.DefaultKeyword); - if (parseOptional(SyntaxKind.ColonToken)) { - node.type = parseType(); - } - else { - node.expression = parseAssignmentExpressionOrHigher(); - } } + node.expression = parseAssignmentExpressionOrHigher(); parseSemicolon(); return finishNode(node); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 74777057963..c38e4e12757 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -975,8 +975,7 @@ module ts { export interface ExportAssignment extends Declaration, ModuleElement { isExportEquals?: boolean; - expression?: Expression; - type?: TypeNode; + expression: Expression; } export interface FileReference extends TextRange { diff --git a/src/services/breakpoints.ts b/src/services/breakpoints.ts index 395141cc4cc..c56ea72cd66 100644 --- a/src/services/breakpoints.ts +++ b/src/services/breakpoints.ts @@ -173,10 +173,6 @@ module ts.BreakpointResolver { return textSpan(node, (node).expression); case SyntaxKind.ExportAssignment: - if (!(node).expression) { - return undefined; - } - // span on export = id return textSpan(node, (node).expression); diff --git a/tests/baselines/reference/exportDefaultTypeAnnoation.errors.txt b/tests/baselines/reference/exportDefaultTypeAnnoation.errors.txt deleted file mode 100644 index 71ff4261ffe..00000000000 --- a/tests/baselines/reference/exportDefaultTypeAnnoation.errors.txt +++ /dev/null @@ -1,8 +0,0 @@ -tests/cases/compiler/exportDefaultTypeAnnoation.ts(2,18): error TS1201: A type annotation on an export statement is only allowed in an ambient external module declaration. - - -==== tests/cases/compiler/exportDefaultTypeAnnoation.ts (1 errors) ==== - - export default : number; - ~~~~~~ -!!! error TS1201: A type annotation on an export statement is only allowed in an ambient external module declaration. \ No newline at end of file diff --git a/tests/baselines/reference/exportDefaultTypeAnnoation.js b/tests/baselines/reference/exportDefaultTypeAnnoation.js deleted file mode 100644 index 71a829ac284..00000000000 --- a/tests/baselines/reference/exportDefaultTypeAnnoation.js +++ /dev/null @@ -1,6 +0,0 @@ -//// [exportDefaultTypeAnnoation.ts] - -export default : number; - -//// [exportDefaultTypeAnnoation.js] -exports.default = ; diff --git a/tests/baselines/reference/exportDefaultTypeAnnoation2.js b/tests/baselines/reference/exportDefaultTypeAnnoation2.js deleted file mode 100644 index 2c918954702..00000000000 --- a/tests/baselines/reference/exportDefaultTypeAnnoation2.js +++ /dev/null @@ -1,7 +0,0 @@ -//// [exportDefaultTypeAnnoation2.ts] - -declare module "mod" { - export default : number; -} - -//// [exportDefaultTypeAnnoation2.js] diff --git a/tests/baselines/reference/exportDefaultTypeAnnoation2.types b/tests/baselines/reference/exportDefaultTypeAnnoation2.types deleted file mode 100644 index 53ca78586cc..00000000000 --- a/tests/baselines/reference/exportDefaultTypeAnnoation2.types +++ /dev/null @@ -1,6 +0,0 @@ -=== tests/cases/compiler/exportDefaultTypeAnnoation2.ts === - -No type information for this code.declare module "mod" { -No type information for this code. export default : number; -No type information for this code.} -No type information for this code. \ No newline at end of file diff --git a/tests/baselines/reference/exportDefaultTypeAnnoation3.errors.txt b/tests/baselines/reference/exportDefaultTypeAnnoation3.errors.txt deleted file mode 100644 index 326713e059e..00000000000 --- a/tests/baselines/reference/exportDefaultTypeAnnoation3.errors.txt +++ /dev/null @@ -1,21 +0,0 @@ -tests/cases/compiler/reference1.ts(2,5): error TS2322: Type 'number' is not assignable to type 'string'. -tests/cases/compiler/reference2.ts(2,5): error TS2322: Type 'number' is not assignable to type 'string'. - - -==== tests/cases/compiler/mod.d.ts (0 errors) ==== - - declare module "mod" { - export default : number; - } - -==== tests/cases/compiler/reference1.ts (1 errors) ==== - import d from "mod"; - var s: string = d; // Error - ~ -!!! error TS2322: Type 'number' is not assignable to type 'string'. - -==== tests/cases/compiler/reference2.ts (1 errors) ==== - import { default as d } from "mod"; - var s: string = d; // Error - ~ -!!! error TS2322: Type 'number' is not assignable to type 'string'. \ No newline at end of file diff --git a/tests/baselines/reference/exportDefaultTypeAnnoation3.js b/tests/baselines/reference/exportDefaultTypeAnnoation3.js deleted file mode 100644 index 1f95e669de5..00000000000 --- a/tests/baselines/reference/exportDefaultTypeAnnoation3.js +++ /dev/null @@ -1,22 +0,0 @@ -//// [tests/cases/compiler/exportDefaultTypeAnnoation3.ts] //// - -//// [mod.d.ts] - -declare module "mod" { - export default : number; -} - -//// [reference1.ts] -import d from "mod"; -var s: string = d; // Error - -//// [reference2.ts] -import { default as d } from "mod"; -var s: string = d; // Error - -//// [reference1.js] -var mod_1 = require("mod"); -var s = mod_1.default; // Error -//// [reference2.js] -var mod_1 = require("mod"); -var s = mod_1.default; // Error diff --git a/tests/cases/compiler/exportDefaultTypeAnnoation.ts b/tests/cases/compiler/exportDefaultTypeAnnoation.ts deleted file mode 100644 index d7fd24d5be3..00000000000 --- a/tests/cases/compiler/exportDefaultTypeAnnoation.ts +++ /dev/null @@ -1,4 +0,0 @@ -// @target: es5 -// @module: commonjs - -export default : number; \ No newline at end of file diff --git a/tests/cases/compiler/exportDefaultTypeAnnoation2.ts b/tests/cases/compiler/exportDefaultTypeAnnoation2.ts deleted file mode 100644 index ddb317bd8fc..00000000000 --- a/tests/cases/compiler/exportDefaultTypeAnnoation2.ts +++ /dev/null @@ -1,6 +0,0 @@ -// @target: es5 -// @module: commonjs - -declare module "mod" { - export default : number; -} \ No newline at end of file diff --git a/tests/cases/compiler/exportDefaultTypeAnnoation3.ts b/tests/cases/compiler/exportDefaultTypeAnnoation3.ts deleted file mode 100644 index 88a45de2d32..00000000000 --- a/tests/cases/compiler/exportDefaultTypeAnnoation3.ts +++ /dev/null @@ -1,15 +0,0 @@ -// @target: es5 -// @module: commonjs - -// @fileName: mod.d.ts -declare module "mod" { - export default : number; -} - -// @fileName: reference1.ts -import d from "mod"; -var s: string = d; // Error - -// @fileName: reference2.ts -import { default as d } from "mod"; -var s: string = d; // Error \ No newline at end of file