@@ -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