@@ -327,6 +327,7 @@ namespace ts {
327327 let globalFunctionType: ObjectType;
328328 let globalArrayType: GenericType;
329329 let globalReadonlyArrayType: GenericType;
330+ let globalTupleBaseType: GenericType;
330331 let globalStringType: ObjectType;
331332 let globalNumberType: ObjectType;
332333 let globalBooleanType: ObjectType;
@@ -775,7 +776,7 @@ namespace ts {
775776 * @param parameterName a name of the parameter to get the symbols for.
776777 * @return a tuple of two symbols
777778 */
778- function getSymbolsOfParameterPropertyDeclaration(parameter: ParameterDeclaration, parameterName: __String): [ Symbol, Symbol ] {
779+ function getSymbolsOfParameterPropertyDeclaration(parameter: ParameterDeclaration, parameterName: __String): Symbol[ ] {
779780 const constructorDeclaration = parameter.parent;
780781 const classDeclaration = parameter.parent.parent;
781782
@@ -4996,7 +4997,7 @@ namespace ts {
49964997 function getBaseTypes(type: InterfaceType): BaseType[] {
49974998 if (!type.resolvedBaseTypes) {
49984999 if (type.objectFlags & ObjectFlags.Tuple) {
4999- type.resolvedBaseTypes = [createArrayType( getUnionType(type.typeParameters))];
5000+ type.resolvedBaseTypes = [createTypeFromGenericGlobalType(globalTupleBaseType, [ getUnionType(type.typeParameters)] )];
50005001 }
50015002 else if (type.symbol.flags & (SymbolFlags.Class | SymbolFlags.Interface)) {
50025003 if (type.symbol.flags & SymbolFlags.Class) {
@@ -9992,7 +9993,7 @@ namespace ts {
99929993 const typeParameters = type.typeParameters || emptyArray;
99939994 let variances = type.variances;
99949995 if (!variances) {
9995- if (type === globalArrayType || type === globalReadonlyArrayType) {
9996+ if (type === globalArrayType || type === globalReadonlyArrayType || type === globalTupleBaseType ) {
99969997 // Arrays are known to be covariant, no need to spend time computing this
99979998 variances = [Variance.Covariant];
99989999 }
@@ -10321,7 +10322,7 @@ namespace ts {
1032110322 function isArrayLikeType(type: Type): boolean {
1032210323 // A type is array-like if it is a reference to the global Array or global ReadonlyArray type,
1032310324 // 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 ) ||
1032510326 !(type.flags & TypeFlags.Nullable) && isTypeAssignableTo(type, anyReadonlyArrayType);
1032610327 }
1032710328
@@ -24509,7 +24510,9 @@ namespace ts {
2450924510 anyArrayType = createArrayType(anyType);
2451024511 autoArrayType = createArrayType(autoType);
2451124512
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);
2451324516 anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType;
2451424517 globalThisType = <GenericType>getGlobalTypeOrUndefined("ThisType" as __String, /*arity*/ 1);
2451524518 }
0 commit comments