@@ -327,6 +327,7 @@ namespace ts {
327
327
let globalFunctionType: ObjectType;
328
328
let globalArrayType: GenericType;
329
329
let globalReadonlyArrayType: GenericType;
330
+ let globalTupleBaseType: GenericType;
330
331
let globalStringType: ObjectType;
331
332
let globalNumberType: ObjectType;
332
333
let globalBooleanType: ObjectType;
@@ -775,7 +776,7 @@ namespace ts {
775
776
* @param parameterName a name of the parameter to get the symbols for.
776
777
* @return a tuple of two symbols
777
778
*/
778
- function getSymbolsOfParameterPropertyDeclaration(parameter: ParameterDeclaration, parameterName: __String): [ Symbol, Symbol ] {
779
+ function getSymbolsOfParameterPropertyDeclaration(parameter: ParameterDeclaration, parameterName: __String): Symbol[ ] {
779
780
const constructorDeclaration = parameter.parent;
780
781
const classDeclaration = parameter.parent.parent;
781
782
@@ -4996,7 +4997,7 @@ namespace ts {
4996
4997
function getBaseTypes(type: InterfaceType): BaseType[] {
4997
4998
if (!type.resolvedBaseTypes) {
4998
4999
if (type.objectFlags & ObjectFlags.Tuple) {
4999
- type.resolvedBaseTypes = [createArrayType( getUnionType(type.typeParameters))];
5000
+ type.resolvedBaseTypes = [createTypeFromGenericGlobalType(globalTupleBaseType, [ getUnionType(type.typeParameters)] )];
5000
5001
}
5001
5002
else if (type.symbol.flags & (SymbolFlags.Class | SymbolFlags.Interface)) {
5002
5003
if (type.symbol.flags & SymbolFlags.Class) {
@@ -9992,7 +9993,7 @@ namespace ts {
9992
9993
const typeParameters = type.typeParameters || emptyArray;
9993
9994
let variances = type.variances;
9994
9995
if (!variances) {
9995
- if (type === globalArrayType || type === globalReadonlyArrayType) {
9996
+ if (type === globalArrayType || type === globalReadonlyArrayType || type === globalTupleBaseType ) {
9996
9997
// Arrays are known to be covariant, no need to spend time computing this
9997
9998
variances = [Variance.Covariant];
9998
9999
}
@@ -10321,7 +10322,7 @@ namespace ts {
10321
10322
function isArrayLikeType(type: Type): boolean {
10322
10323
// A type is array-like if it is a reference to the global Array or global ReadonlyArray type,
10323
10324
// or if it is not the undefined or null type and if it is assignable to ReadonlyArray<any>
10324
- return getObjectFlags(type) & ObjectFlags.Reference && ((<TypeReference>type).target === globalArrayType || (<TypeReference>type).target === globalReadonlyArrayType) ||
10325
+ return getObjectFlags(type) & ObjectFlags.Reference && ((<TypeReference>type).target === globalArrayType || (<TypeReference>type).target === globalReadonlyArrayType || (type as TypeReference).target === globalTupleBaseType ) ||
10325
10326
!(type.flags & TypeFlags.Nullable) && isTypeAssignableTo(type, anyReadonlyArrayType);
10326
10327
}
10327
10328
@@ -24509,7 +24510,9 @@ namespace ts {
24509
24510
anyArrayType = createArrayType(anyType);
24510
24511
autoArrayType = createArrayType(autoType);
24511
24512
24512
- globalReadonlyArrayType = <GenericType>getGlobalTypeOrUndefined("ReadonlyArray" as __String, /*arity*/ 1);
24513
+ // TODO: ReadonlyArray and TupleBase should always be available, but haven't been required previously
24514
+ globalReadonlyArrayType = <GenericType>getGlobalType("ReadonlyArray" as __String, /*arity*/ 1, /*reportErrors*/ true);
24515
+ globalTupleBaseType = <GenericType>getGlobalType("TupleBase" as __String, /*arity*/ 1, /*reportErrors*/ true);
24513
24516
anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType;
24514
24517
globalThisType = <GenericType>getGlobalTypeOrUndefined("ThisType" as __String, /*arity*/ 1);
24515
24518
}
0 commit comments