diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index bd7b02e5c1d24..99f60ee15cefd 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -1028,16 +1028,12 @@ namespace ts {
// Module names are escaped in our symbol table. However, string literal values aren't.
// Escape the name in the "require(...)" clause to ensure we find the right symbol.
- let moduleName = escapeIdentifier(moduleReferenceLiteral.text);
+ const moduleName = escapeIdentifier(moduleReferenceLiteral.text);
if (moduleName === undefined) {
return;
}
- if (moduleName.indexOf("!") >= 0) {
- moduleName = moduleName.substr(0, moduleName.indexOf("!"));
- }
-
const isRelative = isExternalModuleNameRelative(moduleName);
if (!isRelative) {
const symbol = getSymbol(globals, "\"" + moduleName + "\"", SymbolFlags.ValueModule);
diff --git a/tests/baselines/reference/bangInModuleName.js b/tests/baselines/reference/bangInModuleName.js
new file mode 100644
index 0000000000000..769ccbf1d42b0
--- /dev/null
+++ b/tests/baselines/reference/bangInModuleName.js
@@ -0,0 +1,23 @@
+//// [tests/cases/compiler/bangInModuleName.ts] ////
+
+//// [a.d.ts]
+
+
+declare module "http" {
+}
+
+declare module 'intern/dojo/node!http' {
+ import http = require('http');
+ export = http;
+}
+
+//// [a.ts]
+
+///
+
+import * as http from 'intern/dojo/node!http';
+
+//// [a.js]
+///
+define(["require", "exports"], function (require, exports) {
+});
diff --git a/tests/baselines/reference/bangInModuleName.symbols b/tests/baselines/reference/bangInModuleName.symbols
new file mode 100644
index 0000000000000..63ba5d106d800
--- /dev/null
+++ b/tests/baselines/reference/bangInModuleName.symbols
@@ -0,0 +1,21 @@
+=== tests/cases/compiler/a.ts ===
+
+///
+
+import * as http from 'intern/dojo/node!http';
+>http : Symbol(http, Decl(a.ts, 3, 6))
+
+=== tests/cases/compiler/a.d.ts ===
+
+
+declare module "http" {
+}
+
+declare module 'intern/dojo/node!http' {
+ import http = require('http');
+>http : Symbol(http, Decl(a.d.ts, 5, 40))
+
+ export = http;
+>http : Symbol(http, Decl(a.d.ts, 5, 40))
+}
+
diff --git a/tests/baselines/reference/bangInModuleName.types b/tests/baselines/reference/bangInModuleName.types
new file mode 100644
index 0000000000000..06a602e2ff831
--- /dev/null
+++ b/tests/baselines/reference/bangInModuleName.types
@@ -0,0 +1,21 @@
+=== tests/cases/compiler/a.ts ===
+
+///
+
+import * as http from 'intern/dojo/node!http';
+>http : typeof http
+
+=== tests/cases/compiler/a.d.ts ===
+
+
+declare module "http" {
+}
+
+declare module 'intern/dojo/node!http' {
+ import http = require('http');
+>http : typeof http
+
+ export = http;
+>http : typeof http
+}
+
diff --git a/tests/cases/compiler/bangInModuleName.ts b/tests/cases/compiler/bangInModuleName.ts
new file mode 100644
index 0000000000000..6e8f7163109fa
--- /dev/null
+++ b/tests/cases/compiler/bangInModuleName.ts
@@ -0,0 +1,17 @@
+// @module: amd
+
+// @filename: a.d.ts
+
+declare module "http" {
+}
+
+declare module 'intern/dojo/node!http' {
+ import http = require('http');
+ export = http;
+}
+
+// @filename: a.ts
+
+///
+
+import * as http from 'intern/dojo/node!http';
\ No newline at end of file