Skip to content

Commit 5dc8402

Browse files
committed
Make tuple type itself the 'this' type of base array type
1 parent 19319b2 commit 5dc8402

1 file changed

Lines changed: 8 additions & 6 deletions

File tree

src/compiler/checker.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3256,7 +3256,9 @@ namespace ts {
32563256
}
32573257

32583258
function resolveTupleTypeMembers(type: TupleType) {
3259-
let arrayType = resolveStructuredTypeMembers(createArrayType(getUnionType(type.elementTypes, /*noSubtypeReduction*/ true)));
3259+
let arrayElementType = getUnionType(type.elementTypes, /*noSubtypeReduction*/ true);
3260+
// Make the tuple type itself the 'this' type by including an extra type argument
3261+
let arrayType = resolveStructuredTypeMembers(createTypeFromGenericGlobalType(globalArrayType, [arrayElementType, type]));
32603262
let members = createTupleTypeMemberSymbols(type.elementTypes);
32613263
addInheritedMembers(members, arrayType.properties);
32623264
setObjectTypeMembers(type, members, arrayType.callSignatures, arrayType.constructSignatures, arrayType.stringIndexType, arrayType.numberIndexType);
@@ -4159,20 +4161,20 @@ namespace ts {
41594161
/**
41604162
* Instantiates a global type that is generic with some element type, and returns that instantiation.
41614163
*/
4162-
function createTypeFromGenericGlobalType(genericGlobalType: GenericType, elementType: Type): Type {
4163-
return <ObjectType>genericGlobalType !== emptyGenericType ? createTypeReference(genericGlobalType, [elementType]) : emptyObjectType;
4164+
function createTypeFromGenericGlobalType(genericGlobalType: GenericType, typeArguments: Type[]): Type {
4165+
return genericGlobalType !== emptyGenericType ? createTypeReference(genericGlobalType, typeArguments) : emptyObjectType;
41644166
}
41654167

41664168
function createIterableType(elementType: Type): Type {
4167-
return createTypeFromGenericGlobalType(globalIterableType, elementType);
4169+
return createTypeFromGenericGlobalType(globalIterableType, [elementType]);
41684170
}
41694171

41704172
function createIterableIteratorType(elementType: Type): Type {
4171-
return createTypeFromGenericGlobalType(globalIterableIteratorType, elementType);
4173+
return createTypeFromGenericGlobalType(globalIterableIteratorType, [elementType]);
41724174
}
41734175

41744176
function createArrayType(elementType: Type): Type {
4175-
return createTypeFromGenericGlobalType(globalArrayType, elementType);
4177+
return createTypeFromGenericGlobalType(globalArrayType, [elementType]);
41764178
}
41774179

41784180
function getTypeFromArrayTypeNode(node: ArrayTypeNode): Type {

0 commit comments

Comments
 (0)