Skip to content

Commit 5cffdb2

Browse files
committed
Merge branch 'tycho01:13126-empty-tuple' into empty-tuple
2 parents bf14cfa + 03bf0b8 commit 5cffdb2

8 files changed

+15
-25
lines changed

src/compiler/checker.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,6 @@ namespace ts {
337337

338338
const emptyStringType = getLiteralType("");
339339
const zeroType = getLiteralType(0);
340-
const emptyTupleType = createTupleType([]);
341340

342341
const resolutionTargets: TypeSystemEntity[] = [];
343342
const resolutionResults: boolean[] = [];
@@ -2660,7 +2659,7 @@ namespace ts {
26602659
return createArrayTypeNode(elementType);
26612660
}
26622661
else if (type.target.objectFlags & ObjectFlags.Tuple) {
2663-
const tupleConstituentNodes = mapToTypeNodes(typeArguments.slice(0, getTypeReferenceArity(type)), context) || [];
2662+
const tupleConstituentNodes = mapToTypeNodes(typeArguments.slice(0, getTypeReferenceArity(type)), context);
26642663
return createTupleTypeNode(tupleConstituentNodes);
26652664
}
26662665
else {
@@ -10048,7 +10047,7 @@ namespace ts {
1004810047
}
1004910048

1005010049
function isTupleLikeType(type: Type): boolean {
10051-
return !!getPropertyOfType(type, "0" as __String) || type === emptyTupleType;
10050+
return !!getPropertyOfType(type, "0" as __String) || type === getTupleTypeOfArity(0);
1005210051
}
1005310052

1005410053
function isUnitType(type: Type): boolean {
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
tests/cases/compiler/anyIndexedAccessArrayNoException.ts(1,12): error TS1122: A tuple type element list cannot be empty.
21
tests/cases/compiler/anyIndexedAccessArrayNoException.ts(1,12): error TS2538: Type '[]' cannot be used as an index type.
32

43

5-
==== tests/cases/compiler/anyIndexedAccessArrayNoException.ts (2 errors) ====
4+
==== tests/cases/compiler/anyIndexedAccessArrayNoException.ts (1 errors) ====
65
var x: any[[]];
76
~~
8-
!!! error TS1122: A tuple type element list cannot be empty.
9-
~~
107
!!! error TS2538: Type '[]' cannot be used as an index type.
118

tests/baselines/reference/keyofAndIndexedAccessErrors.errors.txt

+1-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(35,21): error
1515
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(36,21): error TS2538: Type 'boolean' cannot be used as an index type.
1616
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(41,31): error TS2538: Type 'boolean' cannot be used as an index type.
1717
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(46,16): error TS2538: Type 'boolean' cannot be used as an index type.
18-
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(49,12): error TS1122: A tuple type element list cannot be empty.
1918
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(63,33): error TS2345: Argument of type '"size"' is not assignable to parameter of type '"name" | "width" | "height" | "visible"'.
2019
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(64,33): error TS2345: Argument of type '"name" | "size"' is not assignable to parameter of type '"name" | "width" | "height" | "visible"'.
2120
Type '"size"' is not assignable to type '"name" | "width" | "height" | "visible"'.
@@ -29,7 +28,7 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(76,5): error
2928
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(77,5): error TS2322: Type 'keyof (T & U)' is not assignable to type 'keyof (T | U)'.
3029

3130

32-
==== tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts (25 errors) ====
31+
==== tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts (24 errors) ====
3332
class Shape {
3433
name: string;
3534
width: number;
@@ -113,8 +112,6 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(77,5): error
113112

114113
type T60 = {}["toString"];
115114
type T61 = []["toString"];
116-
~~
117-
!!! error TS1122: A tuple type element list cannot be empty.
118115

119116
declare let cond: boolean;
120117

tests/baselines/reference/promiseEmptyTupleNoException.errors.txt

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
1-
tests/cases/compiler/promiseEmptyTupleNoException.ts(1,38): error TS1122: A tuple type element list cannot be empty.
21
tests/cases/compiler/promiseEmptyTupleNoException.ts(3,3): error TS2322: Type 'any[]' is not assignable to type '[]'.
32
Types of property 'pop' are incompatible.
43
Type '() => any' is not assignable to type '() => never'.
54
Type 'any' is not assignable to type 'never'.
65

76

8-
==== tests/cases/compiler/promiseEmptyTupleNoException.ts (2 errors) ====
7+
==== tests/cases/compiler/promiseEmptyTupleNoException.ts (1 errors) ====
98
export async function get(): Promise<[]> {
10-
~~
11-
!!! error TS1122: A tuple type element list cannot be empty.
129
let emails = [];
1310
return emails;
1411
~~~~~~~~~~~~~~

tests/baselines/reference/tupleTypes.errors.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ tests/cases/compiler/tupleTypes.ts(65,1): error TS2322: Type '[number, string]'
8989
var tt0: number;
9090
var tt1 = tt[1];
9191
var tt1: string;
92-
var tt2 = tt[2];
92+
var tt2 = tt[2];
9393
var tt2: number | string;
9494

9595
tt = tuple2(1, undefined);

tests/baselines/reference/tupleTypes.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ var tt0 = tt[0];
4040
var tt0: number;
4141
var tt1 = tt[1];
4242
var tt1: string;
43-
var tt2 = tt[2];
43+
var tt2 = tt[2];
4444
var tt2: number | string;
4545

4646
tt = tuple2(1, undefined);

tests/cases/compiler/tupleTypes.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ var tt0 = tt[0];
3939
var tt0: number;
4040
var tt1 = tt[1];
4141
var tt1: string;
42-
var tt2 = tt[2];
42+
var tt2 = tt[2];
4343
var tt2: number | string;
4444

4545
tt = tuple2(1, undefined);
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
// @strictNullChecks: true
2-
3-
var et: [] = [];
4-
var et0 = et[0]; // never
5-
var et0: never;
6-
7-
et = []; // Ok
1+
// @strictNullChecks: true
2+
3+
var et: [] = [];
4+
var et0 = et[0]; // never
5+
var et0: never;
6+
7+
et = []; // Ok

0 commit comments

Comments
 (0)