From 7353cfaece328aadf5a76c2bffe323e53db9e13a Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Thu, 13 Aug 2015 14:56:27 -0700 Subject: [PATCH] Fix #4170, remove error when using import=require syntax in t=ES6 and in ambient context This is consistent with the behaviour of "export=" in --t=ES6 and in ambient contexts --- src/compiler/checker.ts | 2 +- .../reference/es6ImportEqualsDeclaration2.js | 23 ++++++++++++++++ .../es6ImportEqualsDeclaration2.symbols | 26 +++++++++++++++++++ .../es6ImportEqualsDeclaration2.types | 26 +++++++++++++++++++ .../compiler/es6ImportEqualsDeclaration2.ts | 19 ++++++++++++++ 5 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/es6ImportEqualsDeclaration2.js create mode 100644 tests/baselines/reference/es6ImportEqualsDeclaration2.symbols create mode 100644 tests/baselines/reference/es6ImportEqualsDeclaration2.types create mode 100644 tests/cases/compiler/es6ImportEqualsDeclaration2.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 9babfdec339..658bbefc18c 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -13315,7 +13315,7 @@ namespace ts { } } else { - if (languageVersion >= ScriptTarget.ES6) { + if (languageVersion >= ScriptTarget.ES6 && !isInAmbientContext(node)) { // Import equals declaration is deprecated in es6 or above grammarErrorOnNode(node, Diagnostics.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); } diff --git a/tests/baselines/reference/es6ImportEqualsDeclaration2.js b/tests/baselines/reference/es6ImportEqualsDeclaration2.js new file mode 100644 index 00000000000..c7a009a17cf --- /dev/null +++ b/tests/baselines/reference/es6ImportEqualsDeclaration2.js @@ -0,0 +1,23 @@ +//// [tests/cases/compiler/es6ImportEqualsDeclaration2.ts] //// + +//// [server.d.ts] + +declare module "other" { + export class C { } +} + +declare module "server" { + import events = require("other"); // Ambient declaration, no error expected. + + module S { + export var a: number; + } + + export = S; // Ambient declaration, no error expected. +} + +//// [client.ts] +import {a} from "server"; + + +//// [client.js] diff --git a/tests/baselines/reference/es6ImportEqualsDeclaration2.symbols b/tests/baselines/reference/es6ImportEqualsDeclaration2.symbols new file mode 100644 index 00000000000..a7c556f5be0 --- /dev/null +++ b/tests/baselines/reference/es6ImportEqualsDeclaration2.symbols @@ -0,0 +1,26 @@ +=== tests/cases/compiler/server.d.ts === + +declare module "other" { + export class C { } +>C : Symbol(C, Decl(server.d.ts, 1, 24)) +} + +declare module "server" { + import events = require("other"); // Ambient declaration, no error expected. +>events : Symbol(events, Decl(server.d.ts, 5, 25)) + + module S { +>S : Symbol(S, Decl(server.d.ts, 6, 37)) + + export var a: number; +>a : Symbol(a, Decl(server.d.ts, 9, 18)) + } + + export = S; // Ambient declaration, no error expected. +>S : Symbol(S, Decl(server.d.ts, 6, 37)) +} + +=== tests/cases/compiler/client.ts === +import {a} from "server"; +>a : Symbol(a, Decl(client.ts, 0, 8)) + diff --git a/tests/baselines/reference/es6ImportEqualsDeclaration2.types b/tests/baselines/reference/es6ImportEqualsDeclaration2.types new file mode 100644 index 00000000000..a483d10f25c --- /dev/null +++ b/tests/baselines/reference/es6ImportEqualsDeclaration2.types @@ -0,0 +1,26 @@ +=== tests/cases/compiler/server.d.ts === + +declare module "other" { + export class C { } +>C : C +} + +declare module "server" { + import events = require("other"); // Ambient declaration, no error expected. +>events : typeof events + + module S { +>S : typeof S + + export var a: number; +>a : number + } + + export = S; // Ambient declaration, no error expected. +>S : typeof S +} + +=== tests/cases/compiler/client.ts === +import {a} from "server"; +>a : number + diff --git a/tests/cases/compiler/es6ImportEqualsDeclaration2.ts b/tests/cases/compiler/es6ImportEqualsDeclaration2.ts new file mode 100644 index 00000000000..554740d80e1 --- /dev/null +++ b/tests/cases/compiler/es6ImportEqualsDeclaration2.ts @@ -0,0 +1,19 @@ +// @target: es6 + +// @filename: server.d.ts +declare module "other" { + export class C { } +} + +declare module "server" { + import events = require("other"); // Ambient declaration, no error expected. + + module S { + export var a: number; + } + + export = S; // Ambient declaration, no error expected. +} + +// @filename: client.ts +import {a} from "server";