@@ -20210,6 +20210,12 @@ namespace ts {
20210
20210
return mappedTypes && getUnionType(mappedTypes, noReductions ? UnionReduction.None : UnionReduction.Literal);
20211
20211
}
20212
20212
20213
+ function mapTupleType(tuple: TupleTypeReference, mapper: (t: Type) => Type): TupleTypeReference {
20214
+ const target = tuple.target;
20215
+ const newType = map(getTypeArguments(tuple), mapper);
20216
+ return <TupleTypeReference>(createTupleType(newType, target.minLength, target.hasRestElement, target.readonly, target.labeledElementDeclarations));
20217
+ }
20218
+
20213
20219
function extractTypesOfKind(type: Type, kind: TypeFlags) {
20214
20220
return filterType(type, t => (t.flags & kind) !== 0);
20215
20221
}
@@ -28320,28 +28326,33 @@ namespace ts {
28320
28326
}
28321
28327
return awaitedType;
28322
28328
}
28329
+ checkPromiseOperationExists(node.operation);
28323
28330
const iterated = getIteratedTypeOrElementType(IterationUse.AllowsSyncIterablesFlag, operandType, undefinedType, /*errorNode*/undefined, /*checkAssignability*/ false);
28324
28331
if (!iterated) {
28325
28332
error(node.expression, Diagnostics.The_expression_after_the_await_0_operator_must_be_iterable, node.operation);
28326
28333
return anyType;
28327
28334
}
28328
- const awaitedType = checkAwaitedType(iterated, node, Diagnostics.Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);
28329
- checkPromiseOperationExists(node.operation);
28335
+ const awaited = (T: Type) => checkAwaitedType(T, node, Diagnostics.Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member);
28330
28336
switch (node.operation) {
28331
- case "all":
28332
- return createArrayType(awaitedType);
28337
+ case "all": {
28338
+ if (isTupleLikeType(operandType)) return mapTupleType(<TupleTypeReference>operandType, awaited);
28339
+ return createArrayType(awaited(iterated));
28340
+ }
28333
28341
case "any":
28334
28342
case "race":
28335
- return awaitedType ;
28343
+ return awaited(iterated) ;
28336
28344
case "allSettled":
28337
28345
const PromiseSettledResult = getGlobalPromiseSettledResultType(true);
28346
+ const promiseSettled = (T: Type) => instantiateType(
28347
+ PromiseSettledResult,
28348
+ createTypeMapper(PromiseSettledResult.aliasTypeArguments!, /*targets*/[T])
28349
+ )!;
28338
28350
if (PromiseSettledResult === (emptyGenericType as any)) {
28339
28351
error(node, Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later, "PromiseSettledResult", "es2020");
28340
28352
return anyType;
28341
28353
}
28342
- const mapper = createTypeMapper(PromiseSettledResult.aliasTypeArguments!, /*targets*/[awaitedType]);
28343
- const result = instantiateType(PromiseSettledResult, mapper)!;
28344
- return createArrayType(result);
28354
+ if (isTupleLikeType(operandType)) return mapTupleType(<TupleTypeReference>operandType, T => promiseSettled(awaited(T)));
28355
+ return createArrayType(promiseSettled(awaited(iterated)));
28345
28356
default:
28346
28357
Debug.fail()
28347
28358
}
0 commit comments