Skip to content

Commit c1c7926

Browse files
committed
Revert "Add TupleBase with unusable mutating Array methods"
This reverts commits 4385444, 2399d58, es55de3, 888da3c
1 parent 2a4519e commit c1c7926

12 files changed

+41
-98
lines changed

src/compiler/checker.ts

+4-7
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,6 @@ namespace ts {
330330
let globalFunctionType: ObjectType;
331331
let globalArrayType: GenericType;
332332
let globalReadonlyArrayType: GenericType;
333-
let globalTupleBaseType: GenericType;
334333
let globalStringType: ObjectType;
335334
let globalNumberType: ObjectType;
336335
let globalBooleanType: ObjectType;
@@ -773,7 +772,7 @@ namespace ts {
773772
* @param parameterName a name of the parameter to get the symbols for.
774773
* @return a tuple of two symbols
775774
*/
776-
function getSymbolsOfParameterPropertyDeclaration(parameter: ParameterDeclaration, parameterName: __String): Symbol[] {
775+
function getSymbolsOfParameterPropertyDeclaration(parameter: ParameterDeclaration, parameterName: __String): [Symbol, Symbol] {
777776
const constructorDeclaration = parameter.parent;
778777
const classDeclaration = parameter.parent.parent;
779778

@@ -4993,7 +4992,7 @@ namespace ts {
49934992
function getBaseTypes(type: InterfaceType): BaseType[] {
49944993
if (!type.resolvedBaseTypes) {
49954994
if (type.objectFlags & ObjectFlags.Tuple) {
4996-
type.resolvedBaseTypes = [createTypeFromGenericGlobalType(globalTupleBaseType, [getUnionType(type.typeParameters)])];
4995+
type.resolvedBaseTypes = [createArrayType(getUnionType(type.typeParameters))];
49974996
}
49984997
else if (type.symbol.flags & (SymbolFlags.Class | SymbolFlags.Interface)) {
49994998
if (type.symbol.flags & SymbolFlags.Class) {
@@ -10018,7 +10017,7 @@ namespace ts {
1001810017
const typeParameters = type.typeParameters || emptyArray;
1001910018
let variances = type.variances;
1002010019
if (!variances) {
10021-
if (type === globalArrayType || type === globalReadonlyArrayType || type === globalTupleBaseType) {
10020+
if (type === globalArrayType || type === globalReadonlyArrayType) {
1002210021
// Arrays are known to be covariant, no need to spend time computing this
1002310022
variances = [Variance.Covariant];
1002410023
}
@@ -10347,7 +10346,7 @@ namespace ts {
1034710346
function isArrayLikeType(type: Type): boolean {
1034810347
// A type is array-like if it is a reference to the global Array or global ReadonlyArray type,
1034910348
// or if it is not the undefined or null type and if it is assignable to ReadonlyArray<any>
10350-
return getObjectFlags(type) & ObjectFlags.Reference && ((<TypeReference>type).target === globalArrayType || (<TypeReference>type).target === globalReadonlyArrayType || (type as TypeReference).target === globalTupleBaseType) ||
10349+
return getObjectFlags(type) & ObjectFlags.Reference && ((<TypeReference>type).target === globalArrayType || (<TypeReference>type).target === globalReadonlyArrayType) ||
1035110350
!(type.flags & TypeFlags.Nullable) && isTypeAssignableTo(type, anyReadonlyArrayType);
1035210351
}
1035310352

@@ -24524,9 +24523,7 @@ namespace ts {
2452424523
anyArrayType = createArrayType(anyType);
2452524524
autoArrayType = createArrayType(autoType);
2452624525

24527-
// TODO: ReadonlyArray and TupleBase should always be available, but haven't been required previously
2452824526
globalReadonlyArrayType = <GenericType>getGlobalTypeOrUndefined("ReadonlyArray" as __String, /*arity*/ 1);
24529-
globalTupleBaseType = <GenericType>getGlobalTypeOrUndefined("TupleBase" as __String, /*arity*/ 1) || globalArrayType;
2453024527
anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType;
2453124528
globalThisType = <GenericType>getGlobalTypeOrUndefined("ThisType" as __String, /*arity*/ 1);
2453224529
}

src/lib/es5.d.ts

-17
Original file line numberDiff line numberDiff line change
@@ -1240,23 +1240,6 @@ interface ArrayConstructor {
12401240

12411241
declare const Array: ArrayConstructor;
12421242

1243-
interface TupleBase<T> extends Array<T> {
1244-
/** Mutation is not allowed on tuples. Do not use this method. */
1245-
push: never;
1246-
/** Mutation is not allowed on tuples. Do not use this method. */
1247-
pop: never;
1248-
/** Mutation is not allowed on tuples. Do not use this method. */
1249-
reverse: never;
1250-
/** Mutation is not allowed on tuples. Do not use this method. */
1251-
sort: never;
1252-
/** Mutation is not allowed on tuples. Do not use this method. */
1253-
shift: never;
1254-
/** Mutation is not allowed on tuples. Do not use this method. */
1255-
unshift: never;
1256-
/** Mutation is not allowed on tuples. Do not use this method. */
1257-
splice: never;
1258-
}
1259-
12601243
interface TypedPropertyDescriptor<T> {
12611244
enumerable?: boolean;
12621245
configurable?: boolean;

tests/baselines/reference/arityAndOrderCompatibility01.errors.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ tests/cases/conformance/types/tuple/arityAndOrderCompatibility01.ts(32,5): error
4040

4141

4242
==== tests/cases/conformance/types/tuple/arityAndOrderCompatibility01.ts (19 errors) ====
43-
interface StrNum extends TupleBase<string|number> {
43+
interface StrNum extends Array<string|number> {
4444
0: string;
4545
1: number;
4646
length: 2;

tests/baselines/reference/arityAndOrderCompatibility01.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//// [arityAndOrderCompatibility01.ts]
2-
interface StrNum extends TupleBase<string|number> {
2+
interface StrNum extends Array<string|number> {
33
0: string;
44
1: number;
55
length: 2;

tests/baselines/reference/arityAndOrderCompatibility01.symbols

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
=== tests/cases/conformance/types/tuple/arityAndOrderCompatibility01.ts ===
2-
interface StrNum extends TupleBase<string|number> {
2+
interface StrNum extends Array<string|number> {
33
>StrNum : Symbol(StrNum, Decl(arityAndOrderCompatibility01.ts, 0, 0))
4-
>TupleBase : Symbol(TupleBase, Decl(lib.d.ts, --, --))
4+
>Array : Symbol(Array, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
55

66
0: string;
77
1: number;

tests/baselines/reference/arityAndOrderCompatibility01.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
=== tests/cases/conformance/types/tuple/arityAndOrderCompatibility01.ts ===
2-
interface StrNum extends TupleBase<string|number> {
2+
interface StrNum extends Array<string|number> {
33
>StrNum : StrNum
4-
>TupleBase : TupleBase<T>
4+
>Array : T[]
55

66
0: string;
77
1: number;

tests/baselines/reference/assignmentCompatBetweenTupleAndArray.errors.txt

+8-10
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatBetweenTupleAndArray.ts(17,1): error TS2322: Type '[number, string]' is not assignable to type 'number[]'.
2-
Types of property 'concat' are incompatible.
3-
Type '{ (...items: ReadonlyArray<string | number>[]): (string | number)[]; (...items: (string | number | ReadonlyArray<string | number>)[]): (string | number)[]; }' is not assignable to type '{ (...items: ReadonlyArray<number>[]): number[]; (...items: (number | ReadonlyArray<number>)[]): number[]; }'.
4-
Type '(string | number)[]' is not assignable to type 'number[]'.
5-
Type 'string | number' is not assignable to type 'number'.
6-
Type 'string' is not assignable to type 'number'.
2+
Types of property 'pop' are incompatible.
3+
Type '() => string | number' is not assignable to type '() => number'.
4+
Type 'string | number' is not assignable to type 'number'.
5+
Type 'string' is not assignable to type 'number'.
76
tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatBetweenTupleAndArray.ts(18,1): error TS2322: Type '{}[]' is not assignable to type '[{}]'.
87
Property '0' is missing in type '{}[]'.
98

@@ -28,11 +27,10 @@ tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignme
2827
numArray = numStrTuple;
2928
~~~~~~~~
3029
!!! error TS2322: Type '[number, string]' is not assignable to type 'number[]'.
31-
!!! error TS2322: Types of property 'concat' are incompatible.
32-
!!! error TS2322: Type '{ (...items: ReadonlyArray<string | number>[]): (string | number)[]; (...items: (string | number | ReadonlyArray<string | number>)[]): (string | number)[]; }' is not assignable to type '{ (...items: ReadonlyArray<number>[]): number[]; (...items: (number | ReadonlyArray<number>)[]): number[]; }'.
33-
!!! error TS2322: Type '(string | number)[]' is not assignable to type 'number[]'.
34-
!!! error TS2322: Type 'string | number' is not assignable to type 'number'.
35-
!!! error TS2322: Type 'string' is not assignable to type 'number'.
30+
!!! error TS2322: Types of property 'pop' are incompatible.
31+
!!! error TS2322: Type '() => string | number' is not assignable to type '() => number'.
32+
!!! error TS2322: Type 'string | number' is not assignable to type 'number'.
33+
!!! error TS2322: Type 'string' is not assignable to type 'number'.
3634
emptyObjTuple = emptyObjArray;
3735
~~~~~~~~~~~~~
3836
!!! error TS2322: Type '{}[]' is not assignable to type '[{}]'.

tests/baselines/reference/tupleTypes.errors.txt

+16-20
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,15 @@ tests/cases/compiler/tupleTypes.ts(18,1): error TS2322: Type '[number, string, n
1010
Type '3' is not assignable to type '2'.
1111
tests/cases/compiler/tupleTypes.ts(41,1): error TS2322: Type 'undefined[]' is not assignable to type '[number, string]'.
1212
tests/cases/compiler/tupleTypes.ts(47,1): error TS2322: Type '[number, string]' is not assignable to type 'number[]'.
13-
Types of property 'concat' are incompatible.
14-
Type '{ (...items: ReadonlyArray<string | number>[]): (string | number)[]; (...items: (string | number | ReadonlyArray<string | number>)[]): (string | number)[]; }' is not assignable to type '{ (...items: ReadonlyArray<number>[]): number[]; (...items: (number | ReadonlyArray<number>)[]): number[]; }'.
15-
Type '(string | number)[]' is not assignable to type 'number[]'.
16-
Type 'string | number' is not assignable to type 'number'.
17-
Type 'string' is not assignable to type 'number'.
13+
Types of property 'pop' are incompatible.
14+
Type '() => string | number' is not assignable to type '() => number'.
15+
Type 'string | number' is not assignable to type 'number'.
16+
Type 'string' is not assignable to type 'number'.
1817
tests/cases/compiler/tupleTypes.ts(49,1): error TS2322: Type '[number, {}]' is not assignable to type 'number[]'.
19-
Types of property 'concat' are incompatible.
20-
Type '{ (...items: ReadonlyArray<number | {}>[]): (number | {})[]; (...items: (number | {} | ReadonlyArray<number | {}>)[]): (number | {})[]; }' is not assignable to type '{ (...items: ReadonlyArray<number>[]): number[]; (...items: (number | ReadonlyArray<number>)[]): number[]; }'.
21-
Type '(number | {})[]' is not assignable to type 'number[]'.
22-
Type 'number | {}' is not assignable to type 'number'.
23-
Type '{}' is not assignable to type 'number'.
18+
Types of property 'pop' are incompatible.
19+
Type '() => number | {}' is not assignable to type '() => number'.
20+
Type 'number | {}' is not assignable to type 'number'.
21+
Type '{}' is not assignable to type 'number'.
2422
tests/cases/compiler/tupleTypes.ts(50,1): error TS2322: Type '[number, number]' is not assignable to type '[number, string]'.
2523
Type 'number' is not assignable to type 'string'.
2624
tests/cases/compiler/tupleTypes.ts(51,1): error TS2322: Type '[number, {}]' is not assignable to type '[number, string]'.
@@ -94,20 +92,18 @@ tests/cases/compiler/tupleTypes.ts(51,1): error TS2322: Type '[number, {}]' is n
9492
a = a1; // Error
9593
~
9694
!!! error TS2322: Type '[number, string]' is not assignable to type 'number[]'.
97-
!!! error TS2322: Types of property 'concat' are incompatible.
98-
!!! error TS2322: Type '{ (...items: ReadonlyArray<string | number>[]): (string | number)[]; (...items: (string | number | ReadonlyArray<string | number>)[]): (string | number)[]; }' is not assignable to type '{ (...items: ReadonlyArray<number>[]): number[]; (...items: (number | ReadonlyArray<number>)[]): number[]; }'.
99-
!!! error TS2322: Type '(string | number)[]' is not assignable to type 'number[]'.
100-
!!! error TS2322: Type 'string | number' is not assignable to type 'number'.
101-
!!! error TS2322: Type 'string' is not assignable to type 'number'.
95+
!!! error TS2322: Types of property 'pop' are incompatible.
96+
!!! error TS2322: Type '() => string | number' is not assignable to type '() => number'.
97+
!!! error TS2322: Type 'string | number' is not assignable to type 'number'.
98+
!!! error TS2322: Type 'string' is not assignable to type 'number'.
10299
a = a2;
103100
a = a3; // Error
104101
~
105102
!!! error TS2322: Type '[number, {}]' is not assignable to type 'number[]'.
106-
!!! error TS2322: Types of property 'concat' are incompatible.
107-
!!! error TS2322: Type '{ (...items: ReadonlyArray<number | {}>[]): (number | {})[]; (...items: (number | {} | ReadonlyArray<number | {}>)[]): (number | {})[]; }' is not assignable to type '{ (...items: ReadonlyArray<number>[]): number[]; (...items: (number | ReadonlyArray<number>)[]): number[]; }'.
108-
!!! error TS2322: Type '(number | {})[]' is not assignable to type 'number[]'.
109-
!!! error TS2322: Type 'number | {}' is not assignable to type 'number'.
110-
!!! error TS2322: Type '{}' is not assignable to type 'number'.
103+
!!! error TS2322: Types of property 'pop' are incompatible.
104+
!!! error TS2322: Type '() => number | {}' is not assignable to type '() => number'.
105+
!!! error TS2322: Type 'number | {}' is not assignable to type 'number'.
106+
!!! error TS2322: Type '{}' is not assignable to type 'number'.
111107
a1 = a2; // Error
112108
~~
113109
!!! error TS2322: Type '[number, number]' is not assignable to type '[number, string]'.

tests/baselines/reference/typeInferenceWithTupleType.errors.txt

-31
This file was deleted.

tests/baselines/reference/typeInferenceWithTupleType.symbols

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ function zip<T, U>(array1: T[], array2: U[]): [[T, U]] {
7070
>i : Symbol(i, Decl(typeInferenceWithTupleType.ts, 14, 12))
7171

7272
zipResult.push([array1[i], array2[i]]);
73-
>zipResult.push : Symbol(TupleBase.push, Decl(lib.d.ts, --, --))
73+
>zipResult.push : Symbol(Array.push, Decl(lib.d.ts, --, --))
7474
>zipResult : Symbol(zipResult, Decl(typeInferenceWithTupleType.ts, 13, 7))
75-
>push : Symbol(TupleBase.push, Decl(lib.d.ts, --, --))
75+
>push : Symbol(Array.push, Decl(lib.d.ts, --, --))
7676
>array1 : Symbol(array1, Decl(typeInferenceWithTupleType.ts, 8, 19))
7777
>i : Symbol(i, Decl(typeInferenceWithTupleType.ts, 14, 12))
7878
>array2 : Symbol(array2, Decl(typeInferenceWithTupleType.ts, 8, 31))

tests/baselines/reference/typeInferenceWithTupleType.types

+4-4
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,11 @@ function zip<T, U>(array1: T[], array2: U[]): [[T, U]] {
8282
>i : number
8383

8484
zipResult.push([array1[i], array2[i]]);
85-
>zipResult.push([array1[i], array2[i]]) : any
86-
>zipResult.push : never
85+
>zipResult.push([array1[i], array2[i]]) : number
86+
>zipResult.push : (...items: [T, U][]) => number
8787
>zipResult : [[T, U]]
88-
>push : never
89-
>[array1[i], array2[i]] : (T | U)[]
88+
>push : (...items: [T, U][]) => number
89+
>[array1[i], array2[i]] : [T, U]
9090
>array1[i] : T
9191
>array1 : T[]
9292
>i : number

tests/cases/conformance/types/tuple/arityAndOrderCompatibility01.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
interface StrNum extends TupleBase<string|number> {
1+
interface StrNum extends Array<string|number> {
22
0: string;
33
1: number;
44
length: 2;

0 commit comments

Comments
 (0)