diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 043e9755ce2..c2f40c169dc 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2621,9 +2621,10 @@ namespace ts { return createTupleTypeNode(tupleConstituentNodes); } } - if (!context.encounteredError && !(context.flags & NodeBuilderFlags.AllowEmptyTuple)) { - context.encounteredError = true; + if (context.encounteredError || (context.flags & NodeBuilderFlags.AllowEmptyTuple)) { + return createTupleTypeNode([]); } + context.encounteredError = true; return undefined; } else { diff --git a/tests/baselines/reference/anyIndexedAccessArrayNoException.errors.txt b/tests/baselines/reference/anyIndexedAccessArrayNoException.errors.txt new file mode 100644 index 00000000000..e207468122b --- /dev/null +++ b/tests/baselines/reference/anyIndexedAccessArrayNoException.errors.txt @@ -0,0 +1,8 @@ +tests/cases/compiler/anyIndexedAccessArrayNoException.ts(1,12): error TS2538: Type '[]' cannot be used as an index type. + + +==== tests/cases/compiler/anyIndexedAccessArrayNoException.ts (1 errors) ==== + var x: any[[]]; + ~~ +!!! error TS2538: Type '[]' cannot be used as an index type. + \ No newline at end of file diff --git a/tests/baselines/reference/anyIndexedAccessArrayNoException.js b/tests/baselines/reference/anyIndexedAccessArrayNoException.js new file mode 100644 index 00000000000..d42bc54deb4 --- /dev/null +++ b/tests/baselines/reference/anyIndexedAccessArrayNoException.js @@ -0,0 +1,6 @@ +//// [anyIndexedAccessArrayNoException.ts] +var x: any[[]]; + + +//// [anyIndexedAccessArrayNoException.js] +var x; diff --git a/tests/baselines/reference/promiseEmptyTupleNoException.errors.txt b/tests/baselines/reference/promiseEmptyTupleNoException.errors.txt new file mode 100644 index 00000000000..0237d658da5 --- /dev/null +++ b/tests/baselines/reference/promiseEmptyTupleNoException.errors.txt @@ -0,0 +1,20 @@ +tests/cases/compiler/promiseEmptyTupleNoException.ts(1,38): error TS1122: A tuple type element list cannot be empty. +tests/cases/compiler/promiseEmptyTupleNoException.ts(3,3): error TS2322: Type 'any[]' is not assignable to type '[]'. + Types of property 'pop' are incompatible. + Type '() => any' is not assignable to type '() => never'. + Type 'any' is not assignable to type 'never'. + + +==== tests/cases/compiler/promiseEmptyTupleNoException.ts (2 errors) ==== + export async function get(): Promise<[]> { + ~~ +!!! error TS1122: A tuple type element list cannot be empty. + let emails = []; + return emails; + ~~~~~~~~~~~~~~ +!!! error TS2322: Type 'any[]' is not assignable to type '[]'. +!!! error TS2322: Types of property 'pop' are incompatible. +!!! error TS2322: Type '() => any' is not assignable to type '() => never'. +!!! error TS2322: Type 'any' is not assignable to type 'never'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/promiseEmptyTupleNoException.js b/tests/baselines/reference/promiseEmptyTupleNoException.js new file mode 100644 index 00000000000..4498cc3b4cf --- /dev/null +++ b/tests/baselines/reference/promiseEmptyTupleNoException.js @@ -0,0 +1,12 @@ +//// [promiseEmptyTupleNoException.ts] +export async function get(): Promise<[]> { + let emails = []; + return emails; +} + + +//// [promiseEmptyTupleNoException.js] +export async function get() { + let emails = []; + return emails; +} diff --git a/tests/cases/compiler/anyIndexedAccessArrayNoException.ts b/tests/cases/compiler/anyIndexedAccessArrayNoException.ts new file mode 100644 index 00000000000..83f9e301d07 --- /dev/null +++ b/tests/cases/compiler/anyIndexedAccessArrayNoException.ts @@ -0,0 +1 @@ +var x: any[[]]; diff --git a/tests/cases/compiler/promiseEmptyTupleNoException.ts b/tests/cases/compiler/promiseEmptyTupleNoException.ts new file mode 100644 index 00000000000..84ae24816e4 --- /dev/null +++ b/tests/cases/compiler/promiseEmptyTupleNoException.ts @@ -0,0 +1,5 @@ +// @target: es2017 +export async function get(): Promise<[]> { + let emails = []; + return emails; +}