diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 5a990d4e9d..11d9187583 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -9102,7 +9102,12 @@ module ts {
globalNumberType = getGlobalType("Number");
globalBooleanType = getGlobalType("Boolean");
globalRegExpType = getGlobalType("RegExp");
- globalTemplateStringsArrayType = getGlobalType("TemplateStringsArray");
+
+ // If we're in ES6 mode, load the TemplateStringsArray.
+ // Otherwise, default to 'unknown' for the purposes of type checking in LS scenarios.
+ globalTemplateStringsArrayType = compilerOptions.target >= ScriptTarget.ES6
+ ? getGlobalType("TemplateStringsArray")
+ : unknownType;
}
initializeTypeChecker();
diff --git a/src/harness/harness.ts b/src/harness/harness.ts
index ab20e56185..f77cd09929 100644
--- a/src/harness/harness.ts
+++ b/src/harness/harness.ts
@@ -15,6 +15,7 @@
///
///
+///
///
///
///
@@ -1002,8 +1003,12 @@ module Harness {
assert.equal(markedErrorCount, fileErrors.length, 'count of errors in ' + inputFile.unitName);
});
+ var numLibraryDiagnostics = ts.countWhere(diagnostics, diagnostic => {
+ return diagnostic.filename && isLibraryFile(diagnostic.filename);
+ });
+
// Verify we didn't miss any errors in total
- assert.equal(totalErrorsReported, diagnostics.length, 'total number of errors');
+ assert.equal(totalErrorsReported + numLibraryDiagnostics, diagnostics.length, 'total number of errors');
return minimalDiagnosticsToString(diagnostics) +
sys.newLine + sys.newLine + outputLines.join('\r\n');
diff --git a/tests/baselines/reference/noDefaultLib.errors.txt b/tests/baselines/reference/noDefaultLib.errors.txt
index f2c23d56d2..0209895005 100644
--- a/tests/baselines/reference/noDefaultLib.errors.txt
+++ b/tests/baselines/reference/noDefaultLib.errors.txt
@@ -1,12 +1,10 @@
error TS2318: Cannot find global type 'Boolean'.
error TS2318: Cannot find global type 'IArguments'.
-error TS2318: Cannot find global type 'TemplateStringsArray'.
tests/cases/compiler/noDefaultLib.ts(4,11): error TS2317: Global type 'Array' must have 1 type parameter(s).
!!! error TS2318: Cannot find global type 'Boolean'.
!!! error TS2318: Cannot find global type 'IArguments'.
-!!! error TS2318: Cannot find global type 'TemplateStringsArray'.
==== tests/cases/compiler/noDefaultLib.ts (1 errors) ====
///
var x;
diff --git a/tests/baselines/reference/parser509698.errors.txt b/tests/baselines/reference/parser509698.errors.txt
index 2a8cc607e1..2aaaec18dc 100644
--- a/tests/baselines/reference/parser509698.errors.txt
+++ b/tests/baselines/reference/parser509698.errors.txt
@@ -6,7 +6,6 @@ error TS2318: Cannot find global type 'Number'.
error TS2318: Cannot find global type 'Object'.
error TS2318: Cannot find global type 'RegExp'.
error TS2318: Cannot find global type 'String'.
-error TS2318: Cannot find global type 'TemplateStringsArray'.
!!! error TS2318: Cannot find global type 'Array'.
@@ -17,7 +16,6 @@ error TS2318: Cannot find global type 'TemplateStringsArray'.
!!! error TS2318: Cannot find global type 'Object'.
!!! error TS2318: Cannot find global type 'RegExp'.
!!! error TS2318: Cannot find global type 'String'.
-!!! error TS2318: Cannot find global type 'TemplateStringsArray'.
==== tests/cases/conformance/parser/ecmascript5/RegressionTests/parser509698.ts (0 errors) ====
///
///
diff --git a/tests/baselines/reference/project/noDefaultLib/amd/noDefaultLib.errors.txt b/tests/baselines/reference/project/noDefaultLib/amd/noDefaultLib.errors.txt
index 908fe85e3d..eeaf52ba72 100644
--- a/tests/baselines/reference/project/noDefaultLib/amd/noDefaultLib.errors.txt
+++ b/tests/baselines/reference/project/noDefaultLib/amd/noDefaultLib.errors.txt
@@ -6,7 +6,6 @@ error TS2318: Cannot find global type 'Number'.
error TS2318: Cannot find global type 'Object'.
error TS2318: Cannot find global type 'RegExp'.
error TS2318: Cannot find global type 'String'.
-error TS2318: Cannot find global type 'TemplateStringsArray'.
test.ts(3,8): error TS2304: Cannot find name 'Array'.
@@ -18,7 +17,6 @@ test.ts(3,8): error TS2304: Cannot find name 'Array'.
!!! error TS2318: Cannot find global type 'Object'.
!!! error TS2318: Cannot find global type 'RegExp'.
!!! error TS2318: Cannot find global type 'String'.
-!!! error TS2318: Cannot find global type 'TemplateStringsArray'.
==== test.ts (1 errors) ====
///
diff --git a/tests/baselines/reference/project/noDefaultLib/node/noDefaultLib.errors.txt b/tests/baselines/reference/project/noDefaultLib/node/noDefaultLib.errors.txt
index 908fe85e3d..eeaf52ba72 100644
--- a/tests/baselines/reference/project/noDefaultLib/node/noDefaultLib.errors.txt
+++ b/tests/baselines/reference/project/noDefaultLib/node/noDefaultLib.errors.txt
@@ -6,7 +6,6 @@ error TS2318: Cannot find global type 'Number'.
error TS2318: Cannot find global type 'Object'.
error TS2318: Cannot find global type 'RegExp'.
error TS2318: Cannot find global type 'String'.
-error TS2318: Cannot find global type 'TemplateStringsArray'.
test.ts(3,8): error TS2304: Cannot find name 'Array'.
@@ -18,7 +17,6 @@ test.ts(3,8): error TS2304: Cannot find name 'Array'.
!!! error TS2318: Cannot find global type 'Object'.
!!! error TS2318: Cannot find global type 'RegExp'.
!!! error TS2318: Cannot find global type 'String'.
-!!! error TS2318: Cannot find global type 'TemplateStringsArray'.
==== test.ts (1 errors) ====
///
diff --git a/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt
new file mode 100644
index 0000000000..a5e05d986c
--- /dev/null
+++ b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt
@@ -0,0 +1,25 @@
+tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(10,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher.
+lib.d.ts(502,11): error TS2300: Duplicate identifier 'TemplateStringsArray'.
+tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(2,7): error TS2300: Duplicate identifier 'TemplateStringsArray'.
+tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(8,3): error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'.
+ Property 'raw' is missing in type '{ [x: number]: undefined; }'.
+
+
+==== tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts (3 errors) ====
+
+ class TemplateStringsArray {
+ ~~~~~~~~~~~~~~~~~~~~
+!!! error TS2300: Duplicate identifier 'TemplateStringsArray'.
+ }
+
+ function f(x: TemplateStringsArray, y: number, z: number) {
+ }
+
+ f({}, 10, 10);
+ ~~
+!!! error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'.
+!!! error TS2345: Property 'raw' is missing in type '{ [x: number]: undefined; }'.
+
+ f `abcdef${ 1234 }${ 5678 }ghijkl`;
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher.
\ No newline at end of file
diff --git a/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.errors.txt b/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.errors.txt
new file mode 100644
index 0000000000..6b2d29139e
--- /dev/null
+++ b/tests/baselines/reference/templateStringsArrayTypeNotDefinedES5Mode.errors.txt
@@ -0,0 +1,18 @@
+tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts(7,1): error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher.
+tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts(5,3): error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'.
+ Property 'raw' is missing in type '{ [x: number]: undefined; }'.
+
+
+==== tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts (2 errors) ====
+
+ function f(x: TemplateStringsArray, y: number, z: number) {
+ }
+
+ f({}, 10, 10);
+ ~~
+!!! error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'.
+!!! error TS2345: Property 'raw' is missing in type '{ [x: number]: undefined; }'.
+
+ f `abcdef${ 1234 }${ 5678 }ghijkl`;
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+!!! error TS1159: Tagged templates are only available when targeting ECMAScript 6 and higher.
\ No newline at end of file
diff --git a/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.errors.txt b/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.errors.txt
new file mode 100644
index 0000000000..8d5f554b42
--- /dev/null
+++ b/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.errors.txt
@@ -0,0 +1,22 @@
+lib.d.ts(502,11): error TS2300: Duplicate identifier 'TemplateStringsArray'.
+tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts(2,7): error TS2300: Duplicate identifier 'TemplateStringsArray'.
+tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts(8,3): error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'.
+ Property 'raw' is missing in type '{ [x: number]: undefined; }'.
+
+
+==== tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts (2 errors) ====
+
+ class TemplateStringsArray {
+ ~~~~~~~~~~~~~~~~~~~~
+!!! error TS2300: Duplicate identifier 'TemplateStringsArray'.
+ }
+
+ function f(x: TemplateStringsArray, y: number, z: number) {
+ }
+
+ f({}, 10, 10);
+ ~~
+!!! error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'.
+!!! error TS2345: Property 'raw' is missing in type '{ [x: number]: undefined; }'.
+
+ f `abcdef${ 1234 }${ 5678 }ghijkl`;
\ No newline at end of file
diff --git a/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.js b/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.js
new file mode 100644
index 0000000000..22ce6831f0
--- /dev/null
+++ b/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.js
@@ -0,0 +1,22 @@
+//// [templateStringsArrayTypeRedefinedInES6Mode.ts]
+
+class TemplateStringsArray {
+}
+
+function f(x: TemplateStringsArray, y: number, z: number) {
+}
+
+f({}, 10, 10);
+
+f `abcdef${ 1234 }${ 5678 }ghijkl`;
+
+//// [templateStringsArrayTypeRedefinedInES6Mode.js]
+var TemplateStringsArray = (function () {
+ function TemplateStringsArray() {
+ }
+ return TemplateStringsArray;
+})();
+function f(x, y, z) {
+}
+f({}, 10, 10);
+f `abcdef${1234}${5678}ghijkl`;
diff --git a/tests/baselines/reference/typeCheckTypeArgument.errors.txt b/tests/baselines/reference/typeCheckTypeArgument.errors.txt
index 71ba09d44f..bf3e8bfdb9 100644
--- a/tests/baselines/reference/typeCheckTypeArgument.errors.txt
+++ b/tests/baselines/reference/typeCheckTypeArgument.errors.txt
@@ -6,7 +6,6 @@ error TS2318: Cannot find global type 'Number'.
error TS2318: Cannot find global type 'Object'.
error TS2318: Cannot find global type 'RegExp'.
error TS2318: Cannot find global type 'String'.
-error TS2318: Cannot find global type 'TemplateStringsArray'.
tests/cases/compiler/typeCheckTypeArgument.ts(3,19): error TS2304: Cannot find name 'UNKNOWN'.
tests/cases/compiler/typeCheckTypeArgument.ts(5,26): error TS2304: Cannot find name 'UNKNOWN'.
tests/cases/compiler/typeCheckTypeArgument.ts(7,21): error TS2304: Cannot find name 'UNKNOWN'.
@@ -23,7 +22,6 @@ tests/cases/compiler/typeCheckTypeArgument.ts(15,13): error TS2304: Cannot find
!!! error TS2318: Cannot find global type 'Object'.
!!! error TS2318: Cannot find global type 'RegExp'.
!!! error TS2318: Cannot find global type 'String'.
-!!! error TS2318: Cannot find global type 'TemplateStringsArray'.
==== tests/cases/compiler/typeCheckTypeArgument.ts (6 errors) ====
///
diff --git a/tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts b/tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts
new file mode 100644
index 0000000000..1a73b7eb43
--- /dev/null
+++ b/tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts
@@ -0,0 +1,11 @@
+// @target: es5
+
+class TemplateStringsArray {
+}
+
+function f(x: TemplateStringsArray, y: number, z: number) {
+}
+
+f({}, 10, 10);
+
+f `abcdef${ 1234 }${ 5678 }ghijkl`;
\ No newline at end of file
diff --git a/tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts b/tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts
new file mode 100644
index 0000000000..3b166baa5c
--- /dev/null
+++ b/tests/cases/compiler/templateStringsArrayTypeNotDefinedES5Mode.ts
@@ -0,0 +1,8 @@
+// @target: es5
+
+function f(x: TemplateStringsArray, y: number, z: number) {
+}
+
+f({}, 10, 10);
+
+f `abcdef${ 1234 }${ 5678 }ghijkl`;
\ No newline at end of file
diff --git a/tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts b/tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts
new file mode 100644
index 0000000000..c28026ef27
--- /dev/null
+++ b/tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts
@@ -0,0 +1,11 @@
+// @target: es6
+
+class TemplateStringsArray {
+}
+
+function f(x: TemplateStringsArray, y: number, z: number) {
+}
+
+f({}, 10, 10);
+
+f `abcdef${ 1234 }${ 5678 }ghijkl`;
\ No newline at end of file