@@ -883,6 +883,7 @@ namespace ts {
883
883
let globalBooleanType: ObjectType;
884
884
let globalRegExpType: ObjectType;
885
885
let globalThisType: GenericType;
886
+ let globalYieldType: GenericType;
886
887
let anyArrayType: Type;
887
888
let autoArrayType: Type;
888
889
let anyReadonlyArrayType: Type;
@@ -24931,6 +24932,16 @@ namespace ts {
24931
24932
});
24932
24933
}
24933
24934
24935
+ function getYieldTypeArgument(type: Type): Type | undefined {
24936
+ return getObjectFlags(type) & ObjectFlags.Reference && (type as TypeReference).target === globalYieldType ? getTypeArguments(type as TypeReference)[0] : undefined;
24937
+ }
24938
+
24939
+ function getYieldTypeFromContextualType(type: Type): Type | undefined {
24940
+ return mapType(type, t => {
24941
+ return t.flags & TypeFlags.Intersection ? forEach((t as IntersectionType).types, getYieldTypeArgument) : getYieldTypeArgument(t);
24942
+ });
24943
+ }
24944
+
24934
24945
function getContextualThisParameterType(func: SignatureDeclaration): Type | undefined {
24935
24946
if (func.kind === SyntaxKind.ArrowFunction) {
24936
24947
return undefined;
@@ -32326,6 +32337,11 @@ namespace ts {
32326
32337
return getIterationTypeOfIterable(use, IterationTypeKind.Return, yieldExpressionType, node.expression)
32327
32338
|| anyType;
32328
32339
}
32340
+
32341
+ const suggestedReturnType = yieldedType && getYieldTypeFromContextualType(yieldedType);
32342
+ if (suggestedReturnType) {
32343
+ return suggestedReturnType;
32344
+ }
32329
32345
else if (returnType) {
32330
32346
return getIterationTypeOfGeneratorFunctionReturnType(IterationTypeKind.Next, returnType, isAsync)
32331
32347
|| anyType;
@@ -40618,6 +40634,7 @@ namespace ts {
40618
40634
globalReadonlyArrayType = getGlobalTypeOrUndefined("ReadonlyArray" as __String, /*arity*/ 1) as GenericType || globalArrayType;
40619
40635
anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType;
40620
40636
globalThisType = getGlobalTypeOrUndefined("ThisType" as __String, /*arity*/ 1) as GenericType;
40637
+ globalYieldType = getGlobalTypeOrUndefined("YieldType" as __String, /*arity*/ 1) as GenericType;
40621
40638
40622
40639
if (augmentations) {
40623
40640
// merge _nonglobal_ module augmentations.
0 commit comments