Merge pull request #27271 from Microsoft/fix24570-3

Fix iterated type in for-await-of
This commit is contained in:
Ron Buckton
2018-09-21 12:28:18 -07:00
committed by GitHub
4 changed files with 72 additions and 17 deletions

View File

@@ -25313,14 +25313,18 @@ namespace ts {
if (allowSyncIterables) {
if (typeAsIterable.iteratedTypeOfIterable) {
return typeAsIterable.iteratedTypeOfIterable;
return allowAsyncIterables
? typeAsIterable.iteratedTypeOfAsyncIterable = getAwaitedType(typeAsIterable.iteratedTypeOfIterable)
: typeAsIterable.iteratedTypeOfIterable;
}
// As an optimization, if the type is an instantiation of the global `Iterable<T>` or
// `IterableIterator<T>` then just grab its type argument.
if (isReferenceToType(type, getGlobalIterableType(/*reportErrors*/ false)) ||
isReferenceToType(type, getGlobalIterableIteratorType(/*reportErrors*/ false))) {
return typeAsIterable.iteratedTypeOfIterable = (<GenericType>type).typeArguments![0];
return allowAsyncIterables
? typeAsIterable.iteratedTypeOfAsyncIterable = getAwaitedType((<GenericType>type).typeArguments![0])
: typeAsIterable.iteratedTypeOfIterable = (<GenericType>type).typeArguments![0];
}
}
@@ -25351,9 +25355,11 @@ namespace ts {
: createIterableType(iteratedType), errorNode);
}
return asyncMethodType
? typeAsIterable.iteratedTypeOfAsyncIterable = iteratedType
: typeAsIterable.iteratedTypeOfIterable = iteratedType;
if (iteratedType) {
return allowAsyncIterables
? typeAsIterable.iteratedTypeOfAsyncIterable = asyncMethodType ? iteratedType : getAwaitedType(iteratedType)
: typeAsIterable.iteratedTypeOfIterable = iteratedType;
}
}
}