diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 49f179bf6b087..46f45be58218f 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -1499,6 +1499,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { var strictFunctionTypes = getStrictOptionValue(compilerOptions, "strictFunctionTypes"); var strictBindCallApply = getStrictOptionValue(compilerOptions, "strictBindCallApply"); var strictPropertyInitialization = getStrictOptionValue(compilerOptions, "strictPropertyInitialization"); + var strictBuiltinIteratorReturn = getStrictOptionValue(compilerOptions, "strictBuiltinIteratorReturn"); var noImplicitAny = getStrictOptionValue(compilerOptions, "noImplicitAny"); var noImplicitThis = getStrictOptionValue(compilerOptions, "noImplicitThis"); var useUnknownInCatchVariables = getStrictOptionValue(compilerOptions, "useUnknownInCatchVariables"); @@ -1823,10 +1824,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { getOptionalType: () => optionalType, getPromiseType: () => getGlobalPromiseType(/*reportErrors*/ false), getPromiseLikeType: () => getGlobalPromiseLikeType(/*reportErrors*/ false), - getAsyncIterableType: () => { + getAnyAsyncIterableType: () => { const type = getGlobalAsyncIterableType(/*reportErrors*/ false); if (type === emptyGenericType) return undefined; - return type; + return createTypeReference(type, [anyType, anyType, anyType]); }, isSymbolAccessible, isArrayType, @@ -2150,8 +2151,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { }; var anyIterationTypes = createIterationTypes(anyType, anyType, anyType); - var anyIterationTypesExceptNext = createIterationTypes(anyType, anyType, unknownType); - var defaultIterationTypes = createIterationTypes(neverType, anyType, undefinedType); // default iteration types for `Iterator`. var asyncIterationTypesResolver: IterationTypesResolver = { iterableCacheKey: "iterationTypesOfAsyncIterable", @@ -6877,7 +6876,37 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } let typeArgumentNodes: readonly TypeNode[] | undefined; if (typeArguments.length > 0) { - const typeParameterCount = (type.target.typeParameters || emptyArray).length; + let typeParameterCount = 0; + if (type.target.typeParameters) { + typeParameterCount = Math.min(type.target.typeParameters.length, typeArguments.length); + + // Maybe we should do this for more types, but for now we only elide type arguments that are + // identical to their associated type parameters' defaults for `Iterable`, `IterableIterator`, + // `AsyncIterable`, and `AsyncIterableIterator` to provide backwards-compatible .d.ts emit due + // to each now having three type parameters instead of only one. + if ( + isReferenceToType(type, getGlobalIterableType(/*reportErrors*/ false)) || + isReferenceToType(type, getGlobalIterableIteratorType(/*reportErrors*/ false)) || + isReferenceToType(type, getGlobalAsyncIterableType(/*reportErrors*/ false)) || + isReferenceToType(type, getGlobalAsyncIterableIteratorType(/*reportErrors*/ false)) + ) { + if ( + !type.node || !isTypeReferenceNode(type.node) || !type.node.typeArguments || + type.node.typeArguments.length < typeParameterCount + ) { + while (typeParameterCount > 0) { + const typeArgument = typeArguments[typeParameterCount - 1]; + const typeParameter = type.target.typeParameters[typeParameterCount - 1]; + const defaultType = getDefaultFromTypeParameter(typeParameter); + if (!defaultType || !isTypeIdenticalTo(typeArgument, defaultType)) { + break; + } + typeParameterCount--; + } + } + } + } + typeArgumentNodes = mapToTypeNodes(typeArguments.slice(i, typeParameterCount), context); } const flags = context.flags; @@ -12943,7 +12972,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { const typeNode = isJSDocTypeAlias(declaration) ? declaration.typeExpression : declaration.type; // If typeNode is missing, we will error in checkJSDocTypedefTag. let type = typeNode ? getTypeFromTypeNode(typeNode) : errorType; - if (popTypeResolution()) { const typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); if (typeParameters) { @@ -12953,6 +12981,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { links.instantiations = new Map<string, Type>(); links.instantiations.set(getTypeListId(typeParameters), type); } + if (type === intrinsicMarkerType && symbol.escapedName === "BuiltinIteratorReturn") { + type = strictBuiltinIteratorReturn ? undefinedType : anyType; + } } else { type = errorType; @@ -16888,7 +16919,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function getGlobalAsyncIterableType(reportErrors: boolean) { - return (deferredGlobalAsyncIterableType ||= getGlobalType("AsyncIterable" as __String, /*arity*/ 1, reportErrors)) || emptyGenericType; + return (deferredGlobalAsyncIterableType ||= getGlobalType("AsyncIterable" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType; } function getGlobalAsyncIteratorType(reportErrors: boolean) { @@ -16896,7 +16927,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function getGlobalAsyncIterableIteratorType(reportErrors: boolean) { - return (deferredGlobalAsyncIterableIteratorType ||= getGlobalType("AsyncIterableIterator" as __String, /*arity*/ 1, reportErrors)) || emptyGenericType; + return (deferredGlobalAsyncIterableIteratorType ||= getGlobalType("AsyncIterableIterator" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType; } function getGlobalAsyncGeneratorType(reportErrors: boolean) { @@ -16904,7 +16935,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function getGlobalIterableType(reportErrors: boolean) { - return (deferredGlobalIterableType ||= getGlobalType("Iterable" as __String, /*arity*/ 1, reportErrors)) || emptyGenericType; + return (deferredGlobalIterableType ||= getGlobalType("Iterable" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType; } function getGlobalIteratorType(reportErrors: boolean) { @@ -16912,7 +16943,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function getGlobalIterableIteratorType(reportErrors: boolean) { - return (deferredGlobalIterableIteratorType ||= getGlobalType("IterableIterator" as __String, /*arity*/ 1, reportErrors)) || emptyGenericType; + return (deferredGlobalIterableIteratorType ||= getGlobalType("IterableIterator" as __String, /*arity*/ 3, reportErrors)) || emptyGenericType; } function getGlobalGeneratorType(reportErrors: boolean) { @@ -17015,7 +17046,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } function createIterableType(iteratedType: Type): Type { - return createTypeFromGenericGlobalType(getGlobalIterableType(/*reportErrors*/ true), [iteratedType]); + return createTypeFromGenericGlobalType(getGlobalIterableType(/*reportErrors*/ true), [iteratedType, voidType, undefinedType]); } function createArrayType(elementType: Type, readonly?: boolean): ObjectType { @@ -38207,28 +38238,14 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { returnType = resolver.resolveIterationType(returnType, /*errorNode*/ undefined) || unknownType; nextType = resolver.resolveIterationType(nextType, /*errorNode*/ undefined) || unknownType; if (globalGeneratorType === emptyGenericType) { - // Fall back to the global IterableIterator if returnType is assignable to the expected return iteration - // type of IterableIterator, and the expected next iteration type of IterableIterator is assignable to - // nextType. - const globalType = resolver.getGlobalIterableIteratorType(/*reportErrors*/ false); - const iterationTypes = globalType !== emptyGenericType ? getIterationTypesOfGlobalIterableType(globalType, resolver) : undefined; - const iterableIteratorReturnType = iterationTypes ? iterationTypes.returnType : anyType; - const iterableIteratorNextType = iterationTypes ? iterationTypes.nextType : undefinedType; - if ( - isTypeAssignableTo(returnType, iterableIteratorReturnType) && - isTypeAssignableTo(iterableIteratorNextType, nextType) - ) { - if (globalType !== emptyGenericType) { - return createTypeFromGenericGlobalType(globalType, [yieldType]); - } - - // The global IterableIterator type doesn't exist, so report an error - resolver.getGlobalIterableIteratorType(/*reportErrors*/ true); - return emptyObjectType; + // Fall back to the global IterableIterator type. + const globalIterableIteratorType = resolver.getGlobalIterableIteratorType(/*reportErrors*/ false); + if (globalIterableIteratorType !== emptyGenericType) { + return createTypeFromGenericGlobalType(globalIterableIteratorType, [yieldType, returnType, nextType]); } // The global Generator type doesn't exist, so report an error - resolver.getGlobalGeneratorType(/*reportErrors*/ true); + resolver.getGlobalIterableIteratorType(/*reportErrors*/ true); return emptyObjectType; } @@ -44738,12 +44755,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { return getCachedIterationTypes(type, resolver.iterableCacheKey); } - function getIterationTypesOfGlobalIterableType(globalType: Type, resolver: IterationTypesResolver) { - const globalIterationTypes = getIterationTypesOfIterableCached(globalType, resolver) || - getIterationTypesOfIterableSlow(globalType, resolver, /*errorNode*/ undefined, /*errorOutputContainer*/ undefined, /*noCache*/ false); - return globalIterationTypes === noIterationTypes ? defaultIterationTypes : globalIterationTypes; - } - /** * Gets the *yield*, *return*, and *next* types of an `Iterable`-like or `AsyncIterable`-like * type from from common heuristics. @@ -44757,28 +44768,16 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { * `getIterationTypesOfIterable` instead. */ function getIterationTypesOfIterableFast(type: Type, resolver: IterationTypesResolver) { - // As an optimization, if the type is an instantiation of one of the following global types, then - // just grab its related type argument: - // - `Iterable<T>` or `AsyncIterable<T>` - // - `IterableIterator<T>` or `AsyncIterableIterator<T>` - let globalType: Type; - if ( - isReferenceToType(type, globalType = resolver.getGlobalIterableType(/*reportErrors*/ false)) || - isReferenceToType(type, globalType = resolver.getGlobalIterableIteratorType(/*reportErrors*/ false)) - ) { - const [yieldType] = getTypeArguments(type as GenericType); - // The "return" and "next" types of `Iterable` and `IterableIterator` are defined by the - // iteration types of their `[Symbol.iterator]()` method. The same is true for their async cousins. - // While we define these as `any` and `undefined` in our libs by default, a custom lib *could* use - // different definitions. - const { returnType, nextType } = getIterationTypesOfGlobalIterableType(globalType, resolver); - return setCachedIterationTypes(type, resolver.iterableCacheKey, createIterationTypes(resolver.resolveIterationType(yieldType, /*errorNode*/ undefined) || yieldType, resolver.resolveIterationType(returnType, /*errorNode*/ undefined) || returnType, nextType)); - } - // As an optimization, if the type is an instantiation of the following global type, then // just grab its related type arguments: + // - `Iterable<T, TReturn, TNext>` or `AsyncIterable<T, TReturn, TNext>` + // - `IterableIterator<T, TReturn, TNext>` or `AsyncIterableIterator<T, TReturn, TNext>` // - `Generator<T, TReturn, TNext>` or `AsyncGenerator<T, TReturn, TNext>` - if (isReferenceToType(type, resolver.getGlobalGeneratorType(/*reportErrors*/ false))) { + if ( + isReferenceToType(type, resolver.getGlobalIterableType(/*reportErrors*/ false)) || + isReferenceToType(type, resolver.getGlobalIterableIteratorType(/*reportErrors*/ false)) || + isReferenceToType(type, resolver.getGlobalGeneratorType(/*reportErrors*/ false)) + ) { const [yieldType, returnType, nextType] = getTypeArguments(type as GenericType); return setCachedIterationTypes(type, resolver.iterableCacheKey, createIterationTypes(resolver.resolveIterationType(yieldType, /*errorNode*/ undefined) || yieldType, resolver.resolveIterationType(returnType, /*errorNode*/ undefined) || returnType, nextType)); } @@ -44830,7 +44829,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { isForOfStatement(errorNode.parent) && errorNode.parent.expression === errorNode && getGlobalAsyncIterableType(/*reportErrors*/ false) !== emptyGenericType && - isTypeAssignableTo(type, getGlobalAsyncIterableType(/*reportErrors*/ false)) + isTypeAssignableTo(type, createTypeFromGenericGlobalType(getGlobalAsyncIterableType(/*reportErrors*/ false), [anyType, anyType, anyType])) ); return errorAndMaybeSuggestAwait(errorNode, suggestAwait, message, typeToString(type)); } @@ -44896,22 +44895,12 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { */ function getIterationTypesOfIteratorFast(type: Type, resolver: IterationTypesResolver) { // As an optimization, if the type is an instantiation of one of the following global types, - // then just grab its related type argument: - // - `IterableIterator<T>` or `AsyncIterableIterator<T>` + // then just grab its related type arguments: + // - `IterableIterator<T, TReturn, TNext>` or `AsyncIterableIterator<T, TReturn, TNext>` // - `Iterator<T, TReturn, TNext>` or `AsyncIterator<T, TReturn, TNext>` // - `Generator<T, TReturn, TNext>` or `AsyncGenerator<T, TReturn, TNext>` - const globalType = resolver.getGlobalIterableIteratorType(/*reportErrors*/ false); - if (isReferenceToType(type, globalType)) { - const [yieldType] = getTypeArguments(type as GenericType); - // The "return" and "next" types of `IterableIterator` and `AsyncIterableIterator` are defined by the - // iteration types of their `next`, `return`, and `throw` methods. While we define these as `any` - // and `undefined` in our libs by default, a custom lib *could* use different definitions. - const globalIterationTypes = getIterationTypesOfIteratorCached(globalType, resolver) || - getIterationTypesOfIteratorSlow(globalType, resolver, /*errorNode*/ undefined, /*errorOutputContainer*/ undefined, /*noCache*/ false); - const { returnType, nextType } = globalIterationTypes === noIterationTypes ? defaultIterationTypes : globalIterationTypes; - return setCachedIterationTypes(type, resolver.iteratorCacheKey, createIterationTypes(yieldType, returnType, nextType)); - } if ( + isReferenceToType(type, resolver.getGlobalIterableIteratorType(/*reportErrors*/ false)) || isReferenceToType(type, resolver.getGlobalIteratorType(/*reportErrors*/ false)) || isReferenceToType(type, resolver.getGlobalGeneratorType(/*reportErrors*/ false)) ) { @@ -45003,8 +44992,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { : undefined; if (isTypeAny(methodType)) { - // `return()` and `throw()` don't provide a *next* type. - return methodName === "next" ? anyIterationTypes : anyIterationTypesExceptNext; + return anyIterationTypes; } // Both async and non-async iterators *must* have a `next` method. @@ -46463,7 +46451,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { checkExportsOnMergedDeclarations(node); checkTypeParameters(node.typeParameters); if (node.type.kind === SyntaxKind.IntrinsicKeyword) { - if (!intrinsicTypeKinds.has(node.name.escapedText as string) || length(node.typeParameters) !== 1) { + const typeParameterCount = length(node.typeParameters); + const valid = typeParameterCount === 0 ? node.name.escapedText === "BuiltinIteratorReturn" : + typeParameterCount === 1 && intrinsicTypeKinds.has(node.name.escapedText as string); + if (!valid) { error(node.type, Diagnostics.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types); } } diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 25b5895544c30..11a2b5d273b2d 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -915,6 +915,16 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [ description: Diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor, defaultValueDescription: Diagnostics.false_unless_strict_is_set, }, + { + name: "strictBuiltinIteratorReturn", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any, + defaultValueDescription: Diagnostics.false_unless_strict_is_set, + }, { name: "noImplicitThis", type: "boolean", diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index e71ee7671d19c..89db25cd731e7 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -6368,6 +6368,10 @@ "code": 6719 }, + "Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'.": { + "category": "Message", + "code": 6720 + }, "Default catch clause variables as 'unknown' instead of 'any'.": { "category": "Message", "code": 6803 diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 0a1d95e8ce637..83c18e197e216 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -5237,7 +5237,7 @@ export interface TypeChecker { /** @internal */ createPromiseType(type: Type): Type; /** @internal */ getPromiseType(): Type; /** @internal */ getPromiseLikeType(): Type; - /** @internal */ getAsyncIterableType(): Type | undefined; + /** @internal */ getAnyAsyncIterableType(): Type | undefined; /** * Returns true if the "source" type is assignable to the "target" type. @@ -7407,6 +7407,7 @@ export interface CompilerOptions { strictBindCallApply?: boolean; // Always combine with strict property strictNullChecks?: boolean; // Always combine with strict property strictPropertyInitialization?: boolean; // Always combine with strict property + strictBuiltinIteratorReturn?: boolean; // Always combine with strict property stripInternal?: boolean; /** @deprecated */ suppressExcessPropertyErrors?: boolean; diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 76759fe0ece01..b29944a5236c3 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -9006,6 +9006,12 @@ export const computedOptions = createComputedCompilerOptions({ return getStrictOptionValue(compilerOptions, "strictPropertyInitialization"); }, }, + strictBuiltinIteratorReturn: { + dependencies: ["strict"], + computeValue: compilerOptions => { + return getStrictOptionValue(compilerOptions, "strictBuiltinIteratorReturn"); + }, + }, alwaysStrict: { dependencies: ["strict"], computeValue: compilerOptions => { @@ -9093,6 +9099,7 @@ export type StrictOptionName = | "strictFunctionTypes" | "strictBindCallApply" | "strictPropertyInitialization" + | "strictBuiltinIteratorReturn" | "alwaysStrict" | "useUnknownInCatchVariables"; diff --git a/src/harness/collectionsImpl.ts b/src/harness/collectionsImpl.ts index 7b0a859d0fcbc..6c0da4353a987 100644 --- a/src/harness/collectionsImpl.ts +++ b/src/harness/collectionsImpl.ts @@ -132,6 +132,7 @@ export class SortedMap<K, V> { this._copyOnWrite = false; } } + return undefined; } public *values() { @@ -154,6 +155,7 @@ export class SortedMap<K, V> { this._copyOnWrite = false; } } + return undefined; } public *entries() { @@ -179,6 +181,7 @@ export class SortedMap<K, V> { this._copyOnWrite = false; } } + return undefined; } public [Symbol.iterator]() { diff --git a/src/lib/dom.iterable.d.ts b/src/lib/dom.iterable.d.ts index 8ffbcd4811b55..747f279099191 100644 --- a/src/lib/dom.iterable.d.ts +++ b/src/lib/dom.iterable.d.ts @@ -1,30 +1,30 @@ /// <reference lib="dom" /> interface DOMTokenList { - [Symbol.iterator](): IterableIterator<string>; + [Symbol.iterator](): IterableIterator<string, BuiltinIteratorReturn>; } interface Headers { - [Symbol.iterator](): IterableIterator<[string, string]>; + [Symbol.iterator](): IterableIterator<[string, string], BuiltinIteratorReturn>; /** * Returns an iterator allowing to go through all key/value pairs contained in this object. */ - entries(): IterableIterator<[string, string]>; + entries(): IterableIterator<[string, string], BuiltinIteratorReturn>; /** * Returns an iterator allowing to go through all keys f the key/value pairs contained in this object. */ - keys(): IterableIterator<string>; + keys(): IterableIterator<string, BuiltinIteratorReturn>; /** * Returns an iterator allowing to go through all values of the key/value pairs contained in this object. */ - values(): IterableIterator<string>; + values(): IterableIterator<string, BuiltinIteratorReturn>; } interface NodeList { /** * Returns an array of key, value pairs for every entry in the list */ - entries(): IterableIterator<[number, Node]>; + entries(): IterableIterator<[number, Node], BuiltinIteratorReturn>; /** * Performs the specified action for each node in an list. * @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the list. @@ -34,21 +34,21 @@ interface NodeList { /** * Returns an list of keys in the list */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an list of values in the list */ - values(): IterableIterator<Node>; + values(): IterableIterator<Node, BuiltinIteratorReturn>; - [Symbol.iterator](): IterableIterator<Node>; + [Symbol.iterator](): IterableIterator<Node, BuiltinIteratorReturn>; } interface NodeListOf<TNode extends Node> { /** * Returns an array of key, value pairs for every entry in the list */ - entries(): IterableIterator<[number, TNode]>; + entries(): IterableIterator<[number, TNode], BuiltinIteratorReturn>; /** * Performs the specified action for each node in an list. @@ -59,55 +59,55 @@ interface NodeListOf<TNode extends Node> { /** * Returns an list of keys in the list */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an list of values in the list */ - values(): IterableIterator<TNode>; + values(): IterableIterator<TNode, BuiltinIteratorReturn>; - [Symbol.iterator](): IterableIterator<TNode>; + [Symbol.iterator](): IterableIterator<TNode, BuiltinIteratorReturn>; } interface HTMLCollectionBase { - [Symbol.iterator](): IterableIterator<Element>; + [Symbol.iterator](): IterableIterator<Element, BuiltinIteratorReturn>; } interface HTMLCollectionOf<T extends Element> { - [Symbol.iterator](): IterableIterator<T>; + [Symbol.iterator](): IterableIterator<T, BuiltinIteratorReturn>; } interface FormData { /** * Returns an array of key, value pairs for every entry in the list */ - entries(): IterableIterator<[string, string | File]>; + entries(): IterableIterator<[string, string | File], BuiltinIteratorReturn>; /** * Returns a list of keys in the list */ - keys(): IterableIterator<string>; + keys(): IterableIterator<string, BuiltinIteratorReturn>; /** * Returns a list of values in the list */ - values(): IterableIterator<string | File>; + values(): IterableIterator<string | File, BuiltinIteratorReturn>; - [Symbol.iterator](): IterableIterator<string | File>; + [Symbol.iterator](): IterableIterator<string | File, BuiltinIteratorReturn>; } interface URLSearchParams { /** * Returns an array of key, value pairs for every entry in the search params */ - entries(): IterableIterator<[string, string]>; + entries(): IterableIterator<[string, string], BuiltinIteratorReturn>; /** * Returns a list of keys in the search params */ - keys(): IterableIterator<string>; + keys(): IterableIterator<string, BuiltinIteratorReturn>; /** * Returns a list of values in the search params */ - values(): IterableIterator<string>; + values(): IterableIterator<string, BuiltinIteratorReturn>; /** * iterate over key/value pairs */ - [Symbol.iterator](): IterableIterator<[string, string]>; + [Symbol.iterator](): IterableIterator<[string, string], BuiltinIteratorReturn>; } diff --git a/src/lib/es2015.generator.d.ts b/src/lib/es2015.generator.d.ts index 7c6929173a0e4..064260fc47023 100644 --- a/src/lib/es2015.generator.d.ts +++ b/src/lib/es2015.generator.d.ts @@ -1,6 +1,6 @@ /// <reference lib="es2015.iterable" /> -interface Generator<T = unknown, TReturn = any, TNext = unknown> extends Iterator<T, TReturn, TNext> { +interface Generator<T = unknown, TReturn = any, TNext = any> extends Iterator<T, TReturn, TNext> { // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. next(...args: [] | [TNext]): IteratorResult<T, TReturn>; return(value: TReturn): IteratorResult<T, TReturn>; diff --git a/src/lib/es2015.iterable.d.ts b/src/lib/es2015.iterable.d.ts index d28b8381eec86..9ea54b67f7c45 100644 --- a/src/lib/es2015.iterable.d.ts +++ b/src/lib/es2015.iterable.d.ts @@ -20,39 +20,41 @@ interface IteratorReturnResult<TReturn> { type IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>; -interface Iterator<T, TReturn = any, TNext = undefined> { +interface Iterator<T, TReturn = any, TNext = any> { // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. next(...args: [] | [TNext]): IteratorResult<T, TReturn>; return?(value?: TReturn): IteratorResult<T, TReturn>; throw?(e?: any): IteratorResult<T, TReturn>; } -interface Iterable<T> { - [Symbol.iterator](): Iterator<T>; +interface Iterable<T, TReturn = any, TNext = any> { + [Symbol.iterator](): Iterator<T, TReturn, TNext>; } -interface IterableIterator<T> extends Iterator<T> { - [Symbol.iterator](): IterableIterator<T>; +interface IterableIterator<T, TReturn = any, TNext = any> extends Iterator<T, TReturn, TNext> { + [Symbol.iterator](): IterableIterator<T, TReturn, TNext>; } +type BuiltinIteratorReturn = intrinsic; + interface Array<T> { /** Iterator */ - [Symbol.iterator](): IterableIterator<T>; + [Symbol.iterator](): IterableIterator<T, BuiltinIteratorReturn>; /** * Returns an iterable of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, T]>; + entries(): IterableIterator<[number, T], BuiltinIteratorReturn>; /** * Returns an iterable of keys in the array */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an iterable of values in the array */ - values(): IterableIterator<T>; + values(): IterableIterator<T, BuiltinIteratorReturn>; } interface ArrayConstructor { @@ -73,67 +75,67 @@ interface ArrayConstructor { interface ReadonlyArray<T> { /** Iterator of values in the array. */ - [Symbol.iterator](): IterableIterator<T>; + [Symbol.iterator](): IterableIterator<T, BuiltinIteratorReturn>; /** * Returns an iterable of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, T]>; + entries(): IterableIterator<[number, T], BuiltinIteratorReturn>; /** * Returns an iterable of keys in the array */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an iterable of values in the array */ - values(): IterableIterator<T>; + values(): IterableIterator<T, BuiltinIteratorReturn>; } interface IArguments { /** Iterator */ - [Symbol.iterator](): IterableIterator<any>; + [Symbol.iterator](): IterableIterator<any, BuiltinIteratorReturn>; } interface Map<K, V> { /** Returns an iterable of entries in the map. */ - [Symbol.iterator](): IterableIterator<[K, V]>; + [Symbol.iterator](): IterableIterator<[K, V], BuiltinIteratorReturn>; /** * Returns an iterable of key, value pairs for every entry in the map. */ - entries(): IterableIterator<[K, V]>; + entries(): IterableIterator<[K, V], BuiltinIteratorReturn>; /** * Returns an iterable of keys in the map */ - keys(): IterableIterator<K>; + keys(): IterableIterator<K, BuiltinIteratorReturn>; /** * Returns an iterable of values in the map */ - values(): IterableIterator<V>; + values(): IterableIterator<V, BuiltinIteratorReturn>; } interface ReadonlyMap<K, V> { /** Returns an iterable of entries in the map. */ - [Symbol.iterator](): IterableIterator<[K, V]>; + [Symbol.iterator](): IterableIterator<[K, V], BuiltinIteratorReturn>; /** * Returns an iterable of key, value pairs for every entry in the map. */ - entries(): IterableIterator<[K, V]>; + entries(): IterableIterator<[K, V], BuiltinIteratorReturn>; /** * Returns an iterable of keys in the map */ - keys(): IterableIterator<K>; + keys(): IterableIterator<K, BuiltinIteratorReturn>; /** * Returns an iterable of values in the map */ - values(): IterableIterator<V>; + values(): IterableIterator<V, BuiltinIteratorReturn>; } interface MapConstructor { @@ -149,40 +151,40 @@ interface WeakMapConstructor { interface Set<T> { /** Iterates over values in the set. */ - [Symbol.iterator](): IterableIterator<T>; + [Symbol.iterator](): IterableIterator<T, BuiltinIteratorReturn>; /** * Returns an iterable of [v,v] pairs for every value `v` in the set. */ - entries(): IterableIterator<[T, T]>; + entries(): IterableIterator<[T, T], BuiltinIteratorReturn>; /** * Despite its name, returns an iterable of the values in the set. */ - keys(): IterableIterator<T>; + keys(): IterableIterator<T, BuiltinIteratorReturn>; /** * Returns an iterable of values in the set. */ - values(): IterableIterator<T>; + values(): IterableIterator<T, BuiltinIteratorReturn>; } interface ReadonlySet<T> { /** Iterates over values in the set. */ - [Symbol.iterator](): IterableIterator<T>; + [Symbol.iterator](): IterableIterator<T, BuiltinIteratorReturn>; /** * Returns an iterable of [v,v] pairs for every value `v` in the set. */ - entries(): IterableIterator<[T, T]>; + entries(): IterableIterator<[T, T], BuiltinIteratorReturn>; /** * Despite its name, returns an iterable of the values in the set. */ - keys(): IterableIterator<T>; + keys(): IterableIterator<T, BuiltinIteratorReturn>; /** * Returns an iterable of values in the set. */ - values(): IterableIterator<T>; + values(): IterableIterator<T, BuiltinIteratorReturn>; } interface SetConstructor { @@ -217,23 +219,23 @@ interface PromiseConstructor { interface String { /** Iterator */ - [Symbol.iterator](): IterableIterator<string>; + [Symbol.iterator](): IterableIterator<string, BuiltinIteratorReturn>; } interface Int8Array { - [Symbol.iterator](): IterableIterator<number>; + [Symbol.iterator](): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): IterableIterator<[number, number], BuiltinIteratorReturn>; /** * Returns an list of keys in the array */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an list of values in the array */ - values(): IterableIterator<number>; + values(): IterableIterator<number, BuiltinIteratorReturn>; } interface Int8ArrayConstructor { @@ -249,19 +251,19 @@ interface Int8ArrayConstructor { } interface Uint8Array { - [Symbol.iterator](): IterableIterator<number>; + [Symbol.iterator](): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): IterableIterator<[number, number], BuiltinIteratorReturn>; /** * Returns an list of keys in the array */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an list of values in the array */ - values(): IterableIterator<number>; + values(): IterableIterator<number, BuiltinIteratorReturn>; } interface Uint8ArrayConstructor { @@ -277,21 +279,21 @@ interface Uint8ArrayConstructor { } interface Uint8ClampedArray { - [Symbol.iterator](): IterableIterator<number>; + [Symbol.iterator](): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): IterableIterator<[number, number], BuiltinIteratorReturn>; /** * Returns an list of keys in the array */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an list of values in the array */ - values(): IterableIterator<number>; + values(): IterableIterator<number, BuiltinIteratorReturn>; } interface Uint8ClampedArrayConstructor { @@ -307,21 +309,21 @@ interface Uint8ClampedArrayConstructor { } interface Int16Array { - [Symbol.iterator](): IterableIterator<number>; + [Symbol.iterator](): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): IterableIterator<[number, number], BuiltinIteratorReturn>; /** * Returns an list of keys in the array */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an list of values in the array */ - values(): IterableIterator<number>; + values(): IterableIterator<number, BuiltinIteratorReturn>; } interface Int16ArrayConstructor { @@ -337,19 +339,19 @@ interface Int16ArrayConstructor { } interface Uint16Array { - [Symbol.iterator](): IterableIterator<number>; + [Symbol.iterator](): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): IterableIterator<[number, number], BuiltinIteratorReturn>; /** * Returns an list of keys in the array */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an list of values in the array */ - values(): IterableIterator<number>; + values(): IterableIterator<number, BuiltinIteratorReturn>; } interface Uint16ArrayConstructor { @@ -365,19 +367,19 @@ interface Uint16ArrayConstructor { } interface Int32Array { - [Symbol.iterator](): IterableIterator<number>; + [Symbol.iterator](): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): IterableIterator<[number, number], BuiltinIteratorReturn>; /** * Returns an list of keys in the array */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an list of values in the array */ - values(): IterableIterator<number>; + values(): IterableIterator<number, BuiltinIteratorReturn>; } interface Int32ArrayConstructor { @@ -393,19 +395,19 @@ interface Int32ArrayConstructor { } interface Uint32Array { - [Symbol.iterator](): IterableIterator<number>; + [Symbol.iterator](): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): IterableIterator<[number, number], BuiltinIteratorReturn>; /** * Returns an list of keys in the array */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an list of values in the array */ - values(): IterableIterator<number>; + values(): IterableIterator<number, BuiltinIteratorReturn>; } interface Uint32ArrayConstructor { @@ -421,19 +423,19 @@ interface Uint32ArrayConstructor { } interface Float32Array { - [Symbol.iterator](): IterableIterator<number>; + [Symbol.iterator](): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): IterableIterator<[number, number], BuiltinIteratorReturn>; /** * Returns an list of keys in the array */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an list of values in the array */ - values(): IterableIterator<number>; + values(): IterableIterator<number, BuiltinIteratorReturn>; } interface Float32ArrayConstructor { @@ -449,19 +451,19 @@ interface Float32ArrayConstructor { } interface Float64Array { - [Symbol.iterator](): IterableIterator<number>; + [Symbol.iterator](): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an array of key, value pairs for every entry in the array */ - entries(): IterableIterator<[number, number]>; + entries(): IterableIterator<[number, number], BuiltinIteratorReturn>; /** * Returns an list of keys in the array */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns an list of values in the array */ - values(): IterableIterator<number>; + values(): IterableIterator<number, BuiltinIteratorReturn>; } interface Float64ArrayConstructor { diff --git a/src/lib/es2018.asyncgenerator.d.ts b/src/lib/es2018.asyncgenerator.d.ts index f6966264c8be4..8ce3ba23a4d47 100644 --- a/src/lib/es2018.asyncgenerator.d.ts +++ b/src/lib/es2018.asyncgenerator.d.ts @@ -1,6 +1,6 @@ /// <reference lib="es2018.asynciterable" /> -interface AsyncGenerator<T = unknown, TReturn = any, TNext = unknown> extends AsyncIterator<T, TReturn, TNext> { +interface AsyncGenerator<T = unknown, TReturn = any, TNext = any> extends AsyncIterator<T, TReturn, TNext> { // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. next(...args: [] | [TNext]): Promise<IteratorResult<T, TReturn>>; return(value: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<T, TReturn>>; diff --git a/src/lib/es2018.asynciterable.d.ts b/src/lib/es2018.asynciterable.d.ts index 0fe799e21055e..5b868867f430d 100644 --- a/src/lib/es2018.asynciterable.d.ts +++ b/src/lib/es2018.asynciterable.d.ts @@ -9,17 +9,17 @@ interface SymbolConstructor { readonly asyncIterator: unique symbol; } -interface AsyncIterator<T, TReturn = any, TNext = undefined> { +interface AsyncIterator<T, TReturn = any, TNext = any> { // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. next(...args: [] | [TNext]): Promise<IteratorResult<T, TReturn>>; return?(value?: TReturn | PromiseLike<TReturn>): Promise<IteratorResult<T, TReturn>>; throw?(e?: any): Promise<IteratorResult<T, TReturn>>; } -interface AsyncIterable<T> { - [Symbol.asyncIterator](): AsyncIterator<T>; +interface AsyncIterable<T, TReturn = any, TNext = any> { + [Symbol.asyncIterator](): AsyncIterator<T, TReturn, TNext>; } -interface AsyncIterableIterator<T> extends AsyncIterator<T> { - [Symbol.asyncIterator](): AsyncIterableIterator<T>; +interface AsyncIterableIterator<T, TReturn = any, TNext = any> extends AsyncIterator<T, TReturn, TNext> { + [Symbol.asyncIterator](): AsyncIterableIterator<T, TReturn, TNext>; } diff --git a/src/lib/es2020.bigint.d.ts b/src/lib/es2020.bigint.d.ts index b4b46c7d9bb15..e5cafc442d677 100644 --- a/src/lib/es2020.bigint.d.ts +++ b/src/lib/es2020.bigint.d.ts @@ -153,7 +153,7 @@ interface BigInt64Array { copyWithin(target: number, start: number, end?: number): this; /** Yields index, value pairs for every entry in the array. */ - entries(): IterableIterator<[number, bigint]>; + entries(): IterableIterator<[number, bigint], BuiltinIteratorReturn>; /** * Determines whether all the members of an array satisfy the specified test. @@ -238,7 +238,7 @@ interface BigInt64Array { join(separator?: string): string; /** Yields each index in the array. */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns the index of the last occurrence of a value in an array. @@ -360,9 +360,9 @@ interface BigInt64Array { valueOf(): BigInt64Array; /** Yields each value in the array. */ - values(): IterableIterator<bigint>; + values(): IterableIterator<bigint, BuiltinIteratorReturn>; - [Symbol.iterator](): IterableIterator<bigint>; + [Symbol.iterator](): IterableIterator<bigint, BuiltinIteratorReturn>; readonly [Symbol.toStringTag]: "BigInt64Array"; @@ -425,7 +425,7 @@ interface BigUint64Array { copyWithin(target: number, start: number, end?: number): this; /** Yields index, value pairs for every entry in the array. */ - entries(): IterableIterator<[number, bigint]>; + entries(): IterableIterator<[number, bigint], BuiltinIteratorReturn>; /** * Determines whether all the members of an array satisfy the specified test. @@ -510,7 +510,7 @@ interface BigUint64Array { join(separator?: string): string; /** Yields each index in the array. */ - keys(): IterableIterator<number>; + keys(): IterableIterator<number, BuiltinIteratorReturn>; /** * Returns the index of the last occurrence of a value in an array. @@ -632,9 +632,9 @@ interface BigUint64Array { valueOf(): BigUint64Array; /** Yields each value in the array. */ - values(): IterableIterator<bigint>; + values(): IterableIterator<bigint, BuiltinIteratorReturn>; - [Symbol.iterator](): IterableIterator<bigint>; + [Symbol.iterator](): IterableIterator<bigint, BuiltinIteratorReturn>; readonly [Symbol.toStringTag]: "BigUint64Array"; diff --git a/src/lib/es2020.string.d.ts b/src/lib/es2020.string.d.ts index bc7cf1ad5f7c3..7f7911d517d02 100644 --- a/src/lib/es2020.string.d.ts +++ b/src/lib/es2020.string.d.ts @@ -6,7 +6,7 @@ interface String { * containing the results of that search. * @param regexp A variable name or string literal containing the regular expression pattern and flags. */ - matchAll(regexp: RegExp): IterableIterator<RegExpExecArray>; + matchAll(regexp: RegExp): IterableIterator<RegExpExecArray, BuiltinIteratorReturn>; /** Converts all alphabetic characters to lowercase, taking into account the host environment's current locale. */ toLocaleLowerCase(locales?: Intl.LocalesArgument): string; diff --git a/src/lib/es2020.symbol.wellknown.d.ts b/src/lib/es2020.symbol.wellknown.d.ts index 94a11768256c7..0a65134b7c2d2 100644 --- a/src/lib/es2020.symbol.wellknown.d.ts +++ b/src/lib/es2020.symbol.wellknown.d.ts @@ -15,5 +15,5 @@ interface RegExp { * containing the results of that search. * @param string A string to search within. */ - [Symbol.matchAll](str: string): IterableIterator<RegExpMatchArray>; + [Symbol.matchAll](str: string): IterableIterator<RegExpMatchArray, BuiltinIteratorReturn>; } diff --git a/src/lib/es2022.intl.d.ts b/src/lib/es2022.intl.d.ts index 3beaea6af8ddd..e92a67f7a88d6 100644 --- a/src/lib/es2022.intl.d.ts +++ b/src/lib/es2022.intl.d.ts @@ -37,7 +37,7 @@ declare namespace Intl { containing(codeUnitIndex?: number): SegmentData; /** Returns an iterator to iterate over the segments. */ - [Symbol.iterator](): IterableIterator<SegmentData>; + [Symbol.iterator](): IterableIterator<SegmentData, BuiltinIteratorReturn>; } interface SegmentData { diff --git a/src/services/codefixes/addMissingAwait.ts b/src/services/codefixes/addMissingAwait.ts index 0fc96ba514b37..7f874b5801517 100644 --- a/src/services/codefixes/addMissingAwait.ts +++ b/src/services/codefixes/addMissingAwait.ts @@ -285,7 +285,7 @@ function isInsideAwaitableBody(node: Node) { function makeChange(changeTracker: textChanges.ChangeTracker, errorCode: number, sourceFile: SourceFile, checker: TypeChecker, insertionSite: Expression, fixedDeclarations?: Set<number>) { if (isForOfStatement(insertionSite.parent) && !insertionSite.parent.awaitModifier) { const exprType = checker.getTypeAtLocation(insertionSite); - const asyncIter = checker.getAsyncIterableType(); + const asyncIter = checker.getAnyAsyncIterableType(); if (asyncIter && checker.isTypeAssignableTo(exprType, asyncIter)) { const forOf = insertionSite.parent; changeTracker.replaceNode(sourceFile, forOf, factory.updateForOfStatement(forOf, factory.createToken(SyntaxKind.AwaitKeyword), forOf.initializer, forOf.expression, forOf.statement)); diff --git a/src/testRunner/compilerRunner.ts b/src/testRunner/compilerRunner.ts index 93bc55c1159fe..8ec63a8b7b921 100644 --- a/src/testRunner/compilerRunner.ts +++ b/src/testRunner/compilerRunner.ts @@ -127,44 +127,32 @@ export class CompilerBaselineRunner extends RunnerBase { class CompilerTest { private static varyBy: readonly string[] = [ - "allowArbitraryExtensions", - "allowImportingTsExtensions", - "allowSyntheticDefaultImports", - "alwaysStrict", - "downlevelIteration", - "experimentalDecorators", - "emitDecoratorMetadata", - "esModuleInterop", - "exactOptionalPropertyTypes", - "importHelpers", - "importHelpers", - "isolatedModules", - "jsx", - "module", - "moduleDetection", - "moduleResolution", + // implicit variations from defined options + ...ts.optionDeclarations + .filter(option => + !option.isCommandLineOnly + && ( + option.type === "boolean" + || typeof option.type === "object" + ) + && ( + option.affectsProgramStructure + || option.affectsEmit + || option.affectsModuleResolution + || option.affectsBindDiagnostics + || option.affectsSemanticDiagnostics + || option.affectsSourceFile + || option.affectsDeclarationPath + || option.affectsBuildInfo + ) + ) + .map(option => option.name), + + // explicit variations that do not match above conditions "noEmit", - "noImplicitAny", - "noImplicitThis", - "noPropertyAccessFromIndexSignature", - "noUncheckedIndexedAccess", - "preserveConstEnums", - "removeComments", - "resolveJsonModule", - "resolvePackageJsonExports", - "resolvePackageJsonImports", - "skipDefaultLibCheck", - "skipLibCheck", - "strict", - "strictBindCallApply", - "strictFunctionTypes", - "strictNullChecks", - "strictPropertyInitialization", - "target", - "useDefineForClassFields", - "useUnknownInCatchVariables", - "verbatimModuleSyntax", + "isolatedModules", ]; + private fileName: string; private justName: string; private configuredName: string; diff --git a/tests/baselines/reference/YieldStarExpression4_es6.types b/tests/baselines/reference/YieldStarExpression4_es6.types index 5a84b1bba080b..c2c8b54fde262 100644 --- a/tests/baselines/reference/YieldStarExpression4_es6.types +++ b/tests/baselines/reference/YieldStarExpression4_es6.types @@ -2,8 +2,8 @@ === YieldStarExpression4_es6.ts === function *g() { ->g : () => Generator<any, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>g : () => Generator<any, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield * []; >yield * [] : any diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index f76ecc40be329..3855078b1f285 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -7008,6 +7008,7 @@ declare namespace ts { strictBindCallApply?: boolean; strictNullChecks?: boolean; strictPropertyInitialization?: boolean; + strictBuiltinIteratorReturn?: boolean; stripInternal?: boolean; /** @deprecated */ suppressExcessPropertyErrors?: boolean; diff --git a/tests/baselines/reference/argumentsObjectIterator02_ES6.types b/tests/baselines/reference/argumentsObjectIterator02_ES6.types index a2dd6ad1ecc2a..4dd2e090a434c 100644 --- a/tests/baselines/reference/argumentsObjectIterator02_ES6.types +++ b/tests/baselines/reference/argumentsObjectIterator02_ES6.types @@ -12,10 +12,10 @@ function doubleAndReturnAsArray(x: number, y: number, z: number): [number, numbe > : ^^^^^^ let blah = arguments[Symbol.iterator]; ->blah : () => IterableIterator<any> -> : ^^^^^^ ->arguments[Symbol.iterator] : () => IterableIterator<any> -> : ^^^^^^ +>blah : () => IterableIterator<any, BuiltinIteratorReturn> +> : ^^^^^^ +>arguments[Symbol.iterator] : () => IterableIterator<any, BuiltinIteratorReturn> +> : ^^^^^^ >arguments : IArguments > : ^^^^^^^^^^ >Symbol.iterator : unique symbol @@ -35,8 +35,8 @@ function doubleAndReturnAsArray(x: number, y: number, z: number): [number, numbe >arg : any >blah() : IterableIterator<any> > : ^^^^^^^^^^^^^^^^^^^^^ ->blah : () => IterableIterator<any> -> : ^^^^^^ +>blah : () => IterableIterator<any, BuiltinIteratorReturn> +> : ^^^^^^ result.push(arg + arg); >result.push(arg + arg) : number diff --git a/tests/baselines/reference/builtinIteratorReturn(strictbuiltiniteratorreturn=false).symbols b/tests/baselines/reference/builtinIteratorReturn(strictbuiltiniteratorreturn=false).symbols new file mode 100644 index 0000000000000..121fa7517084d --- /dev/null +++ b/tests/baselines/reference/builtinIteratorReturn(strictbuiltiniteratorreturn=false).symbols @@ -0,0 +1,125 @@ +//// [tests/cases/conformance/types/typeAliases/builtinIteratorReturn.ts] //// + +=== builtinIteratorReturn.ts === +declare const array: number[]; +>array : Symbol(array, Decl(builtinIteratorReturn.ts, 0, 13)) + +declare const map: Map<string, number>; +>map : Symbol(map, Decl(builtinIteratorReturn.ts, 1, 13)) +>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) + +declare const set: Set<number>; +>set : Symbol(set, Decl(builtinIteratorReturn.ts, 2, 13)) +>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --)) + +const i0 = array[Symbol.iterator](); +>i0 : Symbol(i0, Decl(builtinIteratorReturn.ts, 4, 5)) +>array : Symbol(array, Decl(builtinIteratorReturn.ts, 0, 13)) +>Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) +>iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i1 = array.values(); +>i1 : Symbol(i1, Decl(builtinIteratorReturn.ts, 5, 5)) +>array.values : Symbol(Array.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>array : Symbol(array, Decl(builtinIteratorReturn.ts, 0, 13)) +>values : Symbol(Array.values, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i2 = array.keys(); +>i2 : Symbol(i2, Decl(builtinIteratorReturn.ts, 6, 5)) +>array.keys : Symbol(Array.keys, Decl(lib.es2015.iterable.d.ts, --, --)) +>array : Symbol(array, Decl(builtinIteratorReturn.ts, 0, 13)) +>keys : Symbol(Array.keys, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i3 = array.entries(); +>i3 : Symbol(i3, Decl(builtinIteratorReturn.ts, 7, 5)) +>array.entries : Symbol(Array.entries, Decl(lib.es2015.iterable.d.ts, --, --)) +>array : Symbol(array, Decl(builtinIteratorReturn.ts, 0, 13)) +>entries : Symbol(Array.entries, Decl(lib.es2015.iterable.d.ts, --, --)) + +for (const x of array); +>x : Symbol(x, Decl(builtinIteratorReturn.ts, 8, 10)) +>array : Symbol(array, Decl(builtinIteratorReturn.ts, 0, 13)) + +const i4 = map[Symbol.iterator](); +>i4 : Symbol(i4, Decl(builtinIteratorReturn.ts, 10, 5)) +>map : Symbol(map, Decl(builtinIteratorReturn.ts, 1, 13)) +>Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) +>iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i5 = map.values(); +>i5 : Symbol(i5, Decl(builtinIteratorReturn.ts, 11, 5)) +>map.values : Symbol(Map.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>map : Symbol(map, Decl(builtinIteratorReturn.ts, 1, 13)) +>values : Symbol(Map.values, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i6 = map.keys(); +>i6 : Symbol(i6, Decl(builtinIteratorReturn.ts, 12, 5)) +>map.keys : Symbol(Map.keys, Decl(lib.es2015.iterable.d.ts, --, --)) +>map : Symbol(map, Decl(builtinIteratorReturn.ts, 1, 13)) +>keys : Symbol(Map.keys, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i7 = map.entries(); +>i7 : Symbol(i7, Decl(builtinIteratorReturn.ts, 13, 5)) +>map.entries : Symbol(Map.entries, Decl(lib.es2015.iterable.d.ts, --, --)) +>map : Symbol(map, Decl(builtinIteratorReturn.ts, 1, 13)) +>entries : Symbol(Map.entries, Decl(lib.es2015.iterable.d.ts, --, --)) + +for (const x of map); +>x : Symbol(x, Decl(builtinIteratorReturn.ts, 14, 10)) +>map : Symbol(map, Decl(builtinIteratorReturn.ts, 1, 13)) + +const i8 = set[Symbol.iterator](); +>i8 : Symbol(i8, Decl(builtinIteratorReturn.ts, 16, 5)) +>set : Symbol(set, Decl(builtinIteratorReturn.ts, 2, 13)) +>Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) +>iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i9 = set.values(); +>i9 : Symbol(i9, Decl(builtinIteratorReturn.ts, 17, 5)) +>set.values : Symbol(Set.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>set : Symbol(set, Decl(builtinIteratorReturn.ts, 2, 13)) +>values : Symbol(Set.values, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i10 = set.keys(); +>i10 : Symbol(i10, Decl(builtinIteratorReturn.ts, 18, 5)) +>set.keys : Symbol(Set.keys, Decl(lib.es2015.iterable.d.ts, --, --)) +>set : Symbol(set, Decl(builtinIteratorReturn.ts, 2, 13)) +>keys : Symbol(Set.keys, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i11 = set.entries(); +>i11 : Symbol(i11, Decl(builtinIteratorReturn.ts, 19, 5)) +>set.entries : Symbol(Set.entries, Decl(lib.es2015.iterable.d.ts, --, --)) +>set : Symbol(set, Decl(builtinIteratorReturn.ts, 2, 13)) +>entries : Symbol(Set.entries, Decl(lib.es2015.iterable.d.ts, --, --)) + +for (const x of set); +>x : Symbol(x, Decl(builtinIteratorReturn.ts, 20, 10)) +>set : Symbol(set, Decl(builtinIteratorReturn.ts, 2, 13)) + +declare const i12: IterableIterator<number, undefined>; +>i12 : Symbol(i12, Decl(builtinIteratorReturn.ts, 22, 13)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +declare const i13: IterableIterator<number, any>; +>i13 : Symbol(i13, Decl(builtinIteratorReturn.ts, 23, 13)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +declare const i14: IterableIterator<number, boolean>; +>i14 : Symbol(i14, Decl(builtinIteratorReturn.ts, 24, 13)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +declare const i15: Iterable<number, undefined>; +>i15 : Symbol(i15, Decl(builtinIteratorReturn.ts, 25, 13)) +>Iterable : Symbol(Iterable, Decl(lib.es2015.iterable.d.ts, --, --)) + +declare const i16: Iterable<number, any>; +>i16 : Symbol(i16, Decl(builtinIteratorReturn.ts, 26, 13)) +>Iterable : Symbol(Iterable, Decl(lib.es2015.iterable.d.ts, --, --)) + +declare const i17: Iterable<number, boolean>; +>i17 : Symbol(i17, Decl(builtinIteratorReturn.ts, 27, 13)) +>Iterable : Symbol(Iterable, Decl(lib.es2015.iterable.d.ts, --, --)) + diff --git a/tests/baselines/reference/builtinIteratorReturn(strictbuiltiniteratorreturn=false).types b/tests/baselines/reference/builtinIteratorReturn(strictbuiltiniteratorreturn=false).types new file mode 100644 index 0000000000000..914c702b1317f --- /dev/null +++ b/tests/baselines/reference/builtinIteratorReturn(strictbuiltiniteratorreturn=false).types @@ -0,0 +1,213 @@ +//// [tests/cases/conformance/types/typeAliases/builtinIteratorReturn.ts] //// + +=== builtinIteratorReturn.ts === +declare const array: number[]; +>array : number[] +> : ^^^^^^^^ + +declare const map: Map<string, number>; +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ + +declare const set: Set<number>; +>set : Set<number> +> : ^^^^^^^^^^^ + +const i0 = array[Symbol.iterator](); +>i0 : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>array[Symbol.iterator]() : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>array[Symbol.iterator] : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array : number[] +> : ^^^^^^^^ +>Symbol.iterator : unique symbol +> : ^^^^^^^^^^^^^ +>Symbol : SymbolConstructor +> : ^^^^^^^^^^^^^^^^^ +>iterator : unique symbol +> : ^^^^^^^^^^^^^ + +const i1 = array.values(); +>i1 : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>array.values() : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>array.values : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array : number[] +> : ^^^^^^^^ +>values : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +const i2 = array.keys(); +>i2 : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>array.keys() : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>array.keys : () => IterableIterator<number, BuiltinIteratorReturn> +> : ^^^^^^ +>array : number[] +> : ^^^^^^^^ +>keys : () => IterableIterator<number, BuiltinIteratorReturn> +> : ^^^^^^ + +const i3 = array.entries(); +>i3 : IterableIterator<[number, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array.entries() : IterableIterator<[number, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array.entries : () => IterableIterator<[number, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array : number[] +> : ^^^^^^^^ +>entries : () => IterableIterator<[number, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +for (const x of array); +>x : number +> : ^^^^^^ +>array : number[] +> : ^^^^^^^^ + +const i4 = map[Symbol.iterator](); +>i4 : IterableIterator<[string, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map[Symbol.iterator]() : IterableIterator<[string, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map[Symbol.iterator] : () => IterableIterator<[string, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>Symbol.iterator : unique symbol +> : ^^^^^^^^^^^^^ +>Symbol : SymbolConstructor +> : ^^^^^^^^^^^^^^^^^ +>iterator : unique symbol +> : ^^^^^^^^^^^^^ + +const i5 = map.values(); +>i5 : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values() : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>values : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +const i6 = map.keys(); +>i6 : IterableIterator<string> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>map.keys() : IterableIterator<string> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>map.keys : () => IterableIterator<string> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>keys : () => IterableIterator<string> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +const i7 = map.entries(); +>i7 : IterableIterator<[string, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.entries() : IterableIterator<[string, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.entries : () => IterableIterator<[string, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>entries : () => IterableIterator<[string, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +for (const x of map); +>x : [string, number] +> : ^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ + +const i8 = set[Symbol.iterator](); +>i8 : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>set[Symbol.iterator]() : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>set[Symbol.iterator] : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set : Set<number> +> : ^^^^^^^^^^^ +>Symbol.iterator : unique symbol +> : ^^^^^^^^^^^^^ +>Symbol : SymbolConstructor +> : ^^^^^^^^^^^^^^^^^ +>iterator : unique symbol +> : ^^^^^^^^^^^^^ + +const i9 = set.values(); +>i9 : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>set.values() : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>set.values : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set : Set<number> +> : ^^^^^^^^^^^ +>values : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +const i10 = set.keys(); +>i10 : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>set.keys() : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>set.keys : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set : Set<number> +> : ^^^^^^^^^^^ +>keys : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +const i11 = set.entries(); +>i11 : IterableIterator<[number, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set.entries() : IterableIterator<[number, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set.entries : () => IterableIterator<[number, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set : Set<number> +> : ^^^^^^^^^^^ +>entries : () => IterableIterator<[number, number]> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +for (const x of set); +>x : number +> : ^^^^^^ +>set : Set<number> +> : ^^^^^^^^^^^ + +declare const i12: IterableIterator<number, undefined>; +>i12 : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +declare const i13: IterableIterator<number, any>; +>i13 : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ + +declare const i14: IterableIterator<number, boolean>; +>i14 : IterableIterator<number, boolean> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +declare const i15: Iterable<number, undefined>; +>i15 : Iterable<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +declare const i16: Iterable<number, any>; +>i16 : Iterable<number> +> : ^^^^^^^^^^^^^^^^ + +declare const i17: Iterable<number, boolean>; +>i17 : Iterable<number, boolean> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ + diff --git a/tests/baselines/reference/builtinIteratorReturn(strictbuiltiniteratorreturn=true).symbols b/tests/baselines/reference/builtinIteratorReturn(strictbuiltiniteratorreturn=true).symbols new file mode 100644 index 0000000000000..121fa7517084d --- /dev/null +++ b/tests/baselines/reference/builtinIteratorReturn(strictbuiltiniteratorreturn=true).symbols @@ -0,0 +1,125 @@ +//// [tests/cases/conformance/types/typeAliases/builtinIteratorReturn.ts] //// + +=== builtinIteratorReturn.ts === +declare const array: number[]; +>array : Symbol(array, Decl(builtinIteratorReturn.ts, 0, 13)) + +declare const map: Map<string, number>; +>map : Symbol(map, Decl(builtinIteratorReturn.ts, 1, 13)) +>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) + +declare const set: Set<number>; +>set : Symbol(set, Decl(builtinIteratorReturn.ts, 2, 13)) +>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --)) + +const i0 = array[Symbol.iterator](); +>i0 : Symbol(i0, Decl(builtinIteratorReturn.ts, 4, 5)) +>array : Symbol(array, Decl(builtinIteratorReturn.ts, 0, 13)) +>Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) +>iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i1 = array.values(); +>i1 : Symbol(i1, Decl(builtinIteratorReturn.ts, 5, 5)) +>array.values : Symbol(Array.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>array : Symbol(array, Decl(builtinIteratorReturn.ts, 0, 13)) +>values : Symbol(Array.values, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i2 = array.keys(); +>i2 : Symbol(i2, Decl(builtinIteratorReturn.ts, 6, 5)) +>array.keys : Symbol(Array.keys, Decl(lib.es2015.iterable.d.ts, --, --)) +>array : Symbol(array, Decl(builtinIteratorReturn.ts, 0, 13)) +>keys : Symbol(Array.keys, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i3 = array.entries(); +>i3 : Symbol(i3, Decl(builtinIteratorReturn.ts, 7, 5)) +>array.entries : Symbol(Array.entries, Decl(lib.es2015.iterable.d.ts, --, --)) +>array : Symbol(array, Decl(builtinIteratorReturn.ts, 0, 13)) +>entries : Symbol(Array.entries, Decl(lib.es2015.iterable.d.ts, --, --)) + +for (const x of array); +>x : Symbol(x, Decl(builtinIteratorReturn.ts, 8, 10)) +>array : Symbol(array, Decl(builtinIteratorReturn.ts, 0, 13)) + +const i4 = map[Symbol.iterator](); +>i4 : Symbol(i4, Decl(builtinIteratorReturn.ts, 10, 5)) +>map : Symbol(map, Decl(builtinIteratorReturn.ts, 1, 13)) +>Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) +>iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i5 = map.values(); +>i5 : Symbol(i5, Decl(builtinIteratorReturn.ts, 11, 5)) +>map.values : Symbol(Map.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>map : Symbol(map, Decl(builtinIteratorReturn.ts, 1, 13)) +>values : Symbol(Map.values, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i6 = map.keys(); +>i6 : Symbol(i6, Decl(builtinIteratorReturn.ts, 12, 5)) +>map.keys : Symbol(Map.keys, Decl(lib.es2015.iterable.d.ts, --, --)) +>map : Symbol(map, Decl(builtinIteratorReturn.ts, 1, 13)) +>keys : Symbol(Map.keys, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i7 = map.entries(); +>i7 : Symbol(i7, Decl(builtinIteratorReturn.ts, 13, 5)) +>map.entries : Symbol(Map.entries, Decl(lib.es2015.iterable.d.ts, --, --)) +>map : Symbol(map, Decl(builtinIteratorReturn.ts, 1, 13)) +>entries : Symbol(Map.entries, Decl(lib.es2015.iterable.d.ts, --, --)) + +for (const x of map); +>x : Symbol(x, Decl(builtinIteratorReturn.ts, 14, 10)) +>map : Symbol(map, Decl(builtinIteratorReturn.ts, 1, 13)) + +const i8 = set[Symbol.iterator](); +>i8 : Symbol(i8, Decl(builtinIteratorReturn.ts, 16, 5)) +>set : Symbol(set, Decl(builtinIteratorReturn.ts, 2, 13)) +>Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) +>iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i9 = set.values(); +>i9 : Symbol(i9, Decl(builtinIteratorReturn.ts, 17, 5)) +>set.values : Symbol(Set.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>set : Symbol(set, Decl(builtinIteratorReturn.ts, 2, 13)) +>values : Symbol(Set.values, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i10 = set.keys(); +>i10 : Symbol(i10, Decl(builtinIteratorReturn.ts, 18, 5)) +>set.keys : Symbol(Set.keys, Decl(lib.es2015.iterable.d.ts, --, --)) +>set : Symbol(set, Decl(builtinIteratorReturn.ts, 2, 13)) +>keys : Symbol(Set.keys, Decl(lib.es2015.iterable.d.ts, --, --)) + +const i11 = set.entries(); +>i11 : Symbol(i11, Decl(builtinIteratorReturn.ts, 19, 5)) +>set.entries : Symbol(Set.entries, Decl(lib.es2015.iterable.d.ts, --, --)) +>set : Symbol(set, Decl(builtinIteratorReturn.ts, 2, 13)) +>entries : Symbol(Set.entries, Decl(lib.es2015.iterable.d.ts, --, --)) + +for (const x of set); +>x : Symbol(x, Decl(builtinIteratorReturn.ts, 20, 10)) +>set : Symbol(set, Decl(builtinIteratorReturn.ts, 2, 13)) + +declare const i12: IterableIterator<number, undefined>; +>i12 : Symbol(i12, Decl(builtinIteratorReturn.ts, 22, 13)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +declare const i13: IterableIterator<number, any>; +>i13 : Symbol(i13, Decl(builtinIteratorReturn.ts, 23, 13)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +declare const i14: IterableIterator<number, boolean>; +>i14 : Symbol(i14, Decl(builtinIteratorReturn.ts, 24, 13)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) + +declare const i15: Iterable<number, undefined>; +>i15 : Symbol(i15, Decl(builtinIteratorReturn.ts, 25, 13)) +>Iterable : Symbol(Iterable, Decl(lib.es2015.iterable.d.ts, --, --)) + +declare const i16: Iterable<number, any>; +>i16 : Symbol(i16, Decl(builtinIteratorReturn.ts, 26, 13)) +>Iterable : Symbol(Iterable, Decl(lib.es2015.iterable.d.ts, --, --)) + +declare const i17: Iterable<number, boolean>; +>i17 : Symbol(i17, Decl(builtinIteratorReturn.ts, 27, 13)) +>Iterable : Symbol(Iterable, Decl(lib.es2015.iterable.d.ts, --, --)) + diff --git a/tests/baselines/reference/builtinIteratorReturn(strictbuiltiniteratorreturn=true).types b/tests/baselines/reference/builtinIteratorReturn(strictbuiltiniteratorreturn=true).types new file mode 100644 index 0000000000000..f0ffe8c1d63c6 --- /dev/null +++ b/tests/baselines/reference/builtinIteratorReturn(strictbuiltiniteratorreturn=true).types @@ -0,0 +1,213 @@ +//// [tests/cases/conformance/types/typeAliases/builtinIteratorReturn.ts] //// + +=== builtinIteratorReturn.ts === +declare const array: number[]; +>array : number[] +> : ^^^^^^^^ + +declare const map: Map<string, number>; +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ + +declare const set: Set<number>; +>set : Set<number> +> : ^^^^^^^^^^^ + +const i0 = array[Symbol.iterator](); +>i0 : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array[Symbol.iterator]() : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array[Symbol.iterator] : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array : number[] +> : ^^^^^^^^ +>Symbol.iterator : unique symbol +> : ^^^^^^^^^^^^^ +>Symbol : SymbolConstructor +> : ^^^^^^^^^^^^^^^^^ +>iterator : unique symbol +> : ^^^^^^^^^^^^^ + +const i1 = array.values(); +>i1 : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array.values() : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array.values : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array : number[] +> : ^^^^^^^^ +>values : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +const i2 = array.keys(); +>i2 : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array.keys() : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array.keys : () => IterableIterator<number, BuiltinIteratorReturn> +> : ^^^^^^ +>array : number[] +> : ^^^^^^^^ +>keys : () => IterableIterator<number, BuiltinIteratorReturn> +> : ^^^^^^ + +const i3 = array.entries(); +>i3 : IterableIterator<[number, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array.entries() : IterableIterator<[number, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array.entries : () => IterableIterator<[number, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>array : number[] +> : ^^^^^^^^ +>entries : () => IterableIterator<[number, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +for (const x of array); +>x : number +> : ^^^^^^ +>array : number[] +> : ^^^^^^^^ + +const i4 = map[Symbol.iterator](); +>i4 : IterableIterator<[string, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map[Symbol.iterator]() : IterableIterator<[string, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map[Symbol.iterator] : () => IterableIterator<[string, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>Symbol.iterator : unique symbol +> : ^^^^^^^^^^^^^ +>Symbol : SymbolConstructor +> : ^^^^^^^^^^^^^^^^^ +>iterator : unique symbol +> : ^^^^^^^^^^^^^ + +const i5 = map.values(); +>i5 : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values() : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>values : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +const i6 = map.keys(); +>i6 : IterableIterator<string, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.keys() : IterableIterator<string, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.keys : () => IterableIterator<string, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>keys : () => IterableIterator<string, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +const i7 = map.entries(); +>i7 : IterableIterator<[string, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.entries() : IterableIterator<[string, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.entries : () => IterableIterator<[string, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>entries : () => IterableIterator<[string, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +for (const x of map); +>x : [string, number] +> : ^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ + +const i8 = set[Symbol.iterator](); +>i8 : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set[Symbol.iterator]() : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set[Symbol.iterator] : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set : Set<number> +> : ^^^^^^^^^^^ +>Symbol.iterator : unique symbol +> : ^^^^^^^^^^^^^ +>Symbol : SymbolConstructor +> : ^^^^^^^^^^^^^^^^^ +>iterator : unique symbol +> : ^^^^^^^^^^^^^ + +const i9 = set.values(); +>i9 : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set.values() : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set.values : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set : Set<number> +> : ^^^^^^^^^^^ +>values : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +const i10 = set.keys(); +>i10 : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set.keys() : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set.keys : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set : Set<number> +> : ^^^^^^^^^^^ +>keys : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +const i11 = set.entries(); +>i11 : IterableIterator<[number, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set.entries() : IterableIterator<[number, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set.entries : () => IterableIterator<[number, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set : Set<number> +> : ^^^^^^^^^^^ +>entries : () => IterableIterator<[number, number], undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +for (const x of set); +>x : number +> : ^^^^^^ +>set : Set<number> +> : ^^^^^^^^^^^ + +declare const i12: IterableIterator<number, undefined>; +>i12 : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +declare const i13: IterableIterator<number, any>; +>i13 : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ + +declare const i14: IterableIterator<number, boolean>; +>i14 : IterableIterator<number, boolean> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +declare const i15: Iterable<number, undefined>; +>i15 : Iterable<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +declare const i16: Iterable<number, any>; +>i16 : Iterable<number> +> : ^^^^^^^^^^^^^^^^ + +declare const i17: Iterable<number, boolean>; +>i17 : Iterable<number, boolean> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ + diff --git a/tests/baselines/reference/conditionalTypeDoesntSpinForever.types b/tests/baselines/reference/conditionalTypeDoesntSpinForever.types index 73fb1f2d6e19d..9d9489fd8ddff 100644 --- a/tests/baselines/reference/conditionalTypeDoesntSpinForever.types +++ b/tests/baselines/reference/conditionalTypeDoesntSpinForever.types @@ -1,8 +1,8 @@ //// [tests/cases/compiler/conditionalTypeDoesntSpinForever.ts] //// === Performance Stats === -Type Count: 1,000 -Instantiation count: 2,500 -> 5,000 +Type Count: 1,000 -> 2,500 +Instantiation count: 5,000 === conditionalTypeDoesntSpinForever.ts === // A *self-contained* demonstration of the problem follows... diff --git a/tests/baselines/reference/config/initTSConfig/Default initialized TSConfig/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Default initialized TSConfig/tsconfig.json index 4c3a3cb096410..a7774be58c9d5 100644 --- a/tests/baselines/reference/config/initTSConfig/Default initialized TSConfig/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Default initialized TSConfig/tsconfig.json @@ -87,6 +87,7 @@ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --help/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --help/tsconfig.json index 4c3a3cb096410..a7774be58c9d5 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --help/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --help/tsconfig.json @@ -87,6 +87,7 @@ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --watch/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --watch/tsconfig.json index 4c3a3cb096410..a7774be58c9d5 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --watch/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with --watch/tsconfig.json @@ -87,6 +87,7 @@ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with advanced options/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with advanced options/tsconfig.json index edb7ea2b9b349..705b9f76e0100 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with advanced options/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with advanced options/tsconfig.json @@ -87,6 +87,7 @@ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with boolean value compiler options/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with boolean value compiler options/tsconfig.json index e01c1d7bb35dc..ebe2ee57e9069 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with boolean value compiler options/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with boolean value compiler options/tsconfig.json @@ -87,6 +87,7 @@ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with enum value compiler options/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with enum value compiler options/tsconfig.json index e0614bfc14e17..46fb71d52c392 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with enum value compiler options/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with enum value compiler options/tsconfig.json @@ -87,6 +87,7 @@ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with files options/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with files options/tsconfig.json index ef17a1a4dcfb2..300866f96a856 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with files options/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with files options/tsconfig.json @@ -87,6 +87,7 @@ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option value/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option value/tsconfig.json index 015e6dc8a3c76..8a8db313c2111 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option value/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option value/tsconfig.json @@ -87,6 +87,7 @@ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option/tsconfig.json index 4c3a3cb096410..a7774be58c9d5 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with incorrect compiler option/tsconfig.json @@ -87,6 +87,7 @@ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options with enum value/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options with enum value/tsconfig.json index b153779e49c2b..84f23824275f2 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options with enum value/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options with enum value/tsconfig.json @@ -87,6 +87,7 @@ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ diff --git a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options/tsconfig.json b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options/tsconfig.json index 9120ea674fb57..6494b47ae9ebb 100644 --- a/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options/tsconfig.json +++ b/tests/baselines/reference/config/initTSConfig/Initialized TSConfig with list compiler options/tsconfig.json @@ -87,6 +87,7 @@ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ diff --git a/tests/baselines/reference/config/showConfig/Show TSConfig with compileOnSave and more/tsconfig.json b/tests/baselines/reference/config/showConfig/Show TSConfig with compileOnSave and more/tsconfig.json index 27dff8d0b2c57..7796a64971d56 100644 --- a/tests/baselines/reference/config/showConfig/Show TSConfig with compileOnSave and more/tsconfig.json +++ b/tests/baselines/reference/config/showConfig/Show TSConfig with compileOnSave and more/tsconfig.json @@ -11,6 +11,7 @@ "strictFunctionTypes": true, "strictBindCallApply": true, "strictPropertyInitialization": true, + "strictBuiltinIteratorReturn": true, "alwaysStrict": true, "useUnknownInCatchVariables": true }, diff --git a/tests/baselines/reference/config/showConfig/Shows tsconfig for single option/strict/tsconfig.json b/tests/baselines/reference/config/showConfig/Shows tsconfig for single option/strict/tsconfig.json index a94c9ac06ee71..cb5f15904a123 100644 --- a/tests/baselines/reference/config/showConfig/Shows tsconfig for single option/strict/tsconfig.json +++ b/tests/baselines/reference/config/showConfig/Shows tsconfig for single option/strict/tsconfig.json @@ -7,6 +7,7 @@ "strictFunctionTypes": true, "strictBindCallApply": true, "strictPropertyInitialization": true, + "strictBuiltinIteratorReturn": true, "alwaysStrict": true, "useUnknownInCatchVariables": true } diff --git a/tests/baselines/reference/config/showConfig/Shows tsconfig for single option/strictBuiltinIteratorReturn/tsconfig.json b/tests/baselines/reference/config/showConfig/Shows tsconfig for single option/strictBuiltinIteratorReturn/tsconfig.json new file mode 100644 index 0000000000000..090835c267e13 --- /dev/null +++ b/tests/baselines/reference/config/showConfig/Shows tsconfig for single option/strictBuiltinIteratorReturn/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "strictBuiltinIteratorReturn": true + } +} diff --git a/tests/baselines/reference/customAsyncIterator.js b/tests/baselines/reference/customAsyncIterator.js index 31bdd76778077..ea31a03b69d83 100644 --- a/tests/baselines/reference/customAsyncIterator.js +++ b/tests/baselines/reference/customAsyncIterator.js @@ -2,7 +2,7 @@ //// [customAsyncIterator.ts] // GH: https://github.com/microsoft/TypeScript/issues/33239 -class ConstantIterator<T> implements AsyncIterator<T, undefined, T | undefined> { +class ConstantIterator<T> implements AsyncIterator<T, void, T | undefined> { constructor(private constant: T) { } async next(value?: T): Promise<IteratorResult<T>> { diff --git a/tests/baselines/reference/customAsyncIterator.symbols b/tests/baselines/reference/customAsyncIterator.symbols index 641a24f86108a..8e6b7d5f05b45 100644 --- a/tests/baselines/reference/customAsyncIterator.symbols +++ b/tests/baselines/reference/customAsyncIterator.symbols @@ -2,7 +2,7 @@ === customAsyncIterator.ts === // GH: https://github.com/microsoft/TypeScript/issues/33239 -class ConstantIterator<T> implements AsyncIterator<T, undefined, T | undefined> { +class ConstantIterator<T> implements AsyncIterator<T, void, T | undefined> { >ConstantIterator : Symbol(ConstantIterator, Decl(customAsyncIterator.ts, 0, 0)) >T : Symbol(T, Decl(customAsyncIterator.ts, 1, 23)) >AsyncIterator : Symbol(AsyncIterator, Decl(lib.es2018.asynciterable.d.ts, --, --)) diff --git a/tests/baselines/reference/customAsyncIterator.types b/tests/baselines/reference/customAsyncIterator.types index a31d06fdf7ee9..bbf9a8209ac27 100644 --- a/tests/baselines/reference/customAsyncIterator.types +++ b/tests/baselines/reference/customAsyncIterator.types @@ -2,7 +2,7 @@ === customAsyncIterator.ts === // GH: https://github.com/microsoft/TypeScript/issues/33239 -class ConstantIterator<T> implements AsyncIterator<T, undefined, T | undefined> { +class ConstantIterator<T> implements AsyncIterator<T, void, T | undefined> { >ConstantIterator : ConstantIterator<T> > : ^^^^^^^^^^^^^^^^^^^ diff --git a/tests/baselines/reference/dependentDestructuredVariables.types b/tests/baselines/reference/dependentDestructuredVariables.types index 52e4690a91f2b..287dfb004259e 100644 --- a/tests/baselines/reference/dependentDestructuredVariables.types +++ b/tests/baselines/reference/dependentDestructuredVariables.types @@ -789,8 +789,8 @@ const reducerBroken = (state: number, { type, payload }: Action3) => { // Repro from #46143 declare var it: Iterator<number>; ->it : Iterator<number, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>it : Iterator<number, any, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^ const { value, done } = it.next(); >value : any @@ -799,12 +799,12 @@ const { value, done } = it.next(); > : ^^^^^^^^^^^^^^^^^^^ >it.next() : IteratorResult<number, any> > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->it.next : (...args: [] | [undefined]) => IteratorResult<number, any> -> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->it : Iterator<number, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->next : (...args: [] | [undefined]) => IteratorResult<number, any> -> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>it.next : (...args: [] | [any]) => IteratorResult<number, any> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>it : Iterator<number, any, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^ +>next : (...args: [] | [any]) => IteratorResult<number, any> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ if (!done) { >!done : boolean diff --git a/tests/baselines/reference/destructuringAssignmentWithDefault2.types b/tests/baselines/reference/destructuringAssignmentWithDefault2.types index 864ec12dff585..b3a2c81120575 100644 --- a/tests/baselines/reference/destructuringAssignmentWithDefault2.types +++ b/tests/baselines/reference/destructuringAssignmentWithDefault2.types @@ -147,8 +147,8 @@ const { x: z3 = undefined } = a; declare const r: Iterator<number>; ->r : Iterator<number, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>r : Iterator<number, any, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^ let done: boolean; >done : boolean @@ -173,12 +173,12 @@ let value; > : ^^^ >r.next() : IteratorResult<number, any> > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->r.next : (...args: [] | [undefined]) => IteratorResult<number, any> -> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->r : Iterator<number, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->next : (...args: [] | [undefined]) => IteratorResult<number, any> -> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>r.next : (...args: [] | [any]) => IteratorResult<number, any> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>r : Iterator<number, any, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^ +>next : (...args: [] | [any]) => IteratorResult<number, any> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ({ done: done = false, value } = r.next()); >({ done: done = false, value } = r.next()) : IteratorResult<number, any> @@ -199,10 +199,10 @@ let value; > : ^^^ >r.next() : IteratorResult<number, any> > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->r.next : (...args: [] | [undefined]) => IteratorResult<number, any> -> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->r : Iterator<number, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->next : (...args: [] | [undefined]) => IteratorResult<number, any> -> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>r.next : (...args: [] | [any]) => IteratorResult<number, any> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>r : Iterator<number, any, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^ +>next : (...args: [] | [any]) => IteratorResult<number, any> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=false).symbols b/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=false).symbols index 16a1e57d1b016..92e1297495f1b 100644 --- a/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=false).symbols +++ b/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=false).symbols @@ -16,16 +16,17 @@ function mapAsyncIterable<T, U, R = undefined>( >U : Symbol(U, Decl(discriminateWithOptionalProperty2.ts, 4, 28)) >R : Symbol(R, Decl(discriminateWithOptionalProperty2.ts, 4, 31)) - iterable: AsyncGenerator<T, R, void> | AsyncIterable<T>, + iterable: AsyncGenerator<T, R, undefined> | AsyncIterable<T, R, undefined>, >iterable : Symbol(iterable, Decl(discriminateWithOptionalProperty2.ts, 4, 47)) >AsyncGenerator : Symbol(AsyncGenerator, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) >T : Symbol(T, Decl(discriminateWithOptionalProperty2.ts, 4, 26)) >R : Symbol(R, Decl(discriminateWithOptionalProperty2.ts, 4, 31)) >AsyncIterable : Symbol(AsyncIterable, Decl(lib.es2018.asynciterable.d.ts, --, --)) >T : Symbol(T, Decl(discriminateWithOptionalProperty2.ts, 4, 26)) +>R : Symbol(R, Decl(discriminateWithOptionalProperty2.ts, 4, 31)) callback: (value: T) => PromiseOrValue<U>, ->callback : Symbol(callback, Decl(discriminateWithOptionalProperty2.ts, 5, 58)) +>callback : Symbol(callback, Decl(discriminateWithOptionalProperty2.ts, 5, 77)) >value : Symbol(value, Decl(discriminateWithOptionalProperty2.ts, 6, 13)) >T : Symbol(T, Decl(discriminateWithOptionalProperty2.ts, 4, 26)) >PromiseOrValue : Symbol(PromiseOrValue, Decl(discriminateWithOptionalProperty2.ts, 0, 0)) @@ -70,7 +71,7 @@ function mapAsyncIterable<T, U, R = undefined>( try { return { value: await callback(result.value), done: false }; >value : Symbol(value, Decl(discriminateWithOptionalProperty2.ts, 18, 14)) ->callback : Symbol(callback, Decl(discriminateWithOptionalProperty2.ts, 5, 58)) +>callback : Symbol(callback, Decl(discriminateWithOptionalProperty2.ts, 5, 77)) >result.value : Symbol(IteratorYieldResult.value, Decl(lib.es2015.iterable.d.ts, --, --)) >result : Symbol(result, Decl(discriminateWithOptionalProperty2.ts, 10, 27)) >value : Symbol(IteratorYieldResult.value, Decl(lib.es2015.iterable.d.ts, --, --)) diff --git a/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=false).types b/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=false).types index b6b348657dfee..c378f82199043 100644 --- a/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=false).types +++ b/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=false).types @@ -8,12 +8,12 @@ type PromiseOrValue<T> = Promise<T> | T; > : ^^^^^^^^^^^^^^^^^ function mapAsyncIterable<T, U, R = undefined>( ->mapAsyncIterable : <T, U, R = undefined>(iterable: AsyncGenerator<T, R, void> | AsyncIterable<T>, callback: (value: T) => PromiseOrValue<U>) => AsyncGenerator<U, R, void> -> : ^ ^^ ^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ +>mapAsyncIterable : <T, U, R = undefined>(iterable: AsyncGenerator<T, R, undefined> | AsyncIterable<T, R, undefined>, callback: (value: T) => PromiseOrValue<U>) => AsyncGenerator<U, R, void> +> : ^ ^^ ^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ - iterable: AsyncGenerator<T, R, void> | AsyncIterable<T>, ->iterable : AsyncGenerator<T, R, void> | AsyncIterable<T> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + iterable: AsyncGenerator<T, R, undefined> | AsyncIterable<T, R, undefined>, +>iterable : AsyncGenerator<T, R, undefined> | AsyncIterable<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ callback: (value: T) => PromiseOrValue<U>, >callback : (value: T) => PromiseOrValue<U> @@ -23,14 +23,14 @@ function mapAsyncIterable<T, U, R = undefined>( ): AsyncGenerator<U, R, void> { const iterator = iterable[Symbol.asyncIterator](); ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterable[Symbol.asyncIterator]() : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterable[Symbol.asyncIterator] : (() => AsyncGenerator<T, R, void>) | (() => AsyncIterator<T, any, undefined>) -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterable : AsyncGenerator<T, R, void> | AsyncIterable<T> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterable[Symbol.asyncIterator]() : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterable[Symbol.asyncIterator] : (() => AsyncGenerator<T, R, undefined>) | (() => AsyncIterator<T, R, undefined>) +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterable : AsyncGenerator<T, R, undefined> | AsyncIterable<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >Symbol.asyncIterator : unique symbol > : ^^^^^^^^^^^^^ >Symbol : SymbolConstructor @@ -92,27 +92,27 @@ function mapAsyncIterable<T, U, R = undefined>( > : ^^^^^^^ >typeof iterator.return : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.return : ((value?: any) => Promise<IteratorResult<T, any>>) | undefined -> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->return : ((value?: any) => Promise<IteratorResult<T, any>>) | undefined -> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.return : ((value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>>) | undefined +> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>return : ((value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>>) | undefined +> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >"function" : "function" > : ^^^^^^^^^^ try { await iterator.return(); ->await iterator.return() : IteratorResult<T, any> -> : ^^^^^^^^^^^^^^^^^^^^^^ ->iterator.return() : Promise<IteratorResult<T, any>> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.return : (value?: any) => Promise<IteratorResult<T, any>> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->return : (value?: any) => Promise<IteratorResult<T, any>> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>await iterator.return() : IteratorResult<T, R> +> : ^^^^^^^^^^^^^^^^^^^^ +>iterator.return() : Promise<IteratorResult<T, R>> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.return : (value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>return : (value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ } catch (_e) {} >_e : unknown @@ -137,16 +137,16 @@ function mapAsyncIterable<T, U, R = undefined>( > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >mapResult : (result: IteratorResult<T, R>) => Promise<IteratorResult<U, R>> > : ^ ^^ ^^^^^ ->await iterator.next() : IteratorResult<T, any> -> : ^^^^^^^^^^^^^^^^^^^^^^ ->iterator.next() : Promise<IteratorResult<T, any>> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.next : (...args: [] | [undefined]) => Promise<IteratorResult<T, any>> -> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->next : (...args: [] | [undefined]) => Promise<IteratorResult<T, any>> -> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>await iterator.next() : IteratorResult<T, R> +> : ^^^^^^^^^^^^^^^^^^^^ +>iterator.next() : Promise<IteratorResult<T, R>> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.next : (...args: [] | [undefined]) => Promise<IteratorResult<T, R>> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>next : (...args: [] | [undefined]) => Promise<IteratorResult<T, R>> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ }, async return(): Promise<IteratorResult<U, R>> { @@ -160,12 +160,12 @@ function mapAsyncIterable<T, U, R = undefined>( > : ^^^^^^^ >typeof iterator.return : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.return : ((value?: any) => Promise<IteratorResult<T, any>>) | undefined -> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->return : ((value?: any) => Promise<IteratorResult<T, any>>) | undefined -> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.return : ((value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>>) | undefined +> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>return : ((value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>>) | undefined +> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >"function" : "function" > : ^^^^^^^^^^ @@ -174,16 +174,16 @@ function mapAsyncIterable<T, U, R = undefined>( > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >mapResult : (result: IteratorResult<T, R>) => Promise<IteratorResult<U, R>> > : ^ ^^ ^^^^^ ->await iterator.return() : IteratorResult<T, any> -> : ^^^^^^^^^^^^^^^^^^^^^^ ->iterator.return() : Promise<IteratorResult<T, any>> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.return : (value?: any) => Promise<IteratorResult<T, any>> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->return : (value?: any) => Promise<IteratorResult<T, any>> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>await iterator.return() : IteratorResult<T, R> +> : ^^^^^^^^^^^^^^^^^^^^ +>iterator.return() : Promise<IteratorResult<T, R>> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.return : (value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>return : (value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ : { value: undefined as any, done: true }; >{ value: undefined as any, done: true } : { value: any; done: true; } @@ -209,12 +209,12 @@ function mapAsyncIterable<T, U, R = undefined>( > : ^^^^^^^ >typeof iterator.throw : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.throw : ((e?: any) => Promise<IteratorResult<T, any>>) | undefined -> : ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->throw : ((e?: any) => Promise<IteratorResult<T, any>>) | undefined -> : ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.throw : ((e?: any) => Promise<IteratorResult<T, R>>) | undefined +> : ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>throw : ((e?: any) => Promise<IteratorResult<T, R>>) | undefined +> : ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >"function" : "function" > : ^^^^^^^^^^ @@ -223,16 +223,16 @@ function mapAsyncIterable<T, U, R = undefined>( > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >mapResult : (result: IteratorResult<T, R>) => Promise<IteratorResult<U, R>> > : ^ ^^ ^^^^^ ->await iterator.throw(error) : IteratorResult<T, any> -> : ^^^^^^^^^^^^^^^^^^^^^^ ->iterator.throw(error) : Promise<IteratorResult<T, any>> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.throw : (e?: any) => Promise<IteratorResult<T, any>> -> : ^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->throw : (e?: any) => Promise<IteratorResult<T, any>> -> : ^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>await iterator.throw(error) : IteratorResult<T, R> +> : ^^^^^^^^^^^^^^^^^^^^ +>iterator.throw(error) : Promise<IteratorResult<T, R>> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.throw : (e?: any) => Promise<IteratorResult<T, R>> +> : ^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>throw : (e?: any) => Promise<IteratorResult<T, R>> +> : ^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >error : unknown > : ^^^^^^^ } @@ -355,8 +355,8 @@ const doubles = mapAsyncIterable(iterable, (x) => x + x); > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >mapAsyncIterable(iterable, (x) => x + x) : AsyncGenerator<number, number, void> > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->mapAsyncIterable : <T, U, R = undefined>(iterable: AsyncGenerator<T, R, void> | AsyncIterable<T>, callback: (value: T) => PromiseOrValue<U>) => AsyncGenerator<U, R, void> -> : ^ ^^ ^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ +>mapAsyncIterable : <T, U, R = undefined>(iterable: AsyncGenerator<T, R, undefined> | AsyncIterable<T, R, undefined>, callback: (value: T) => PromiseOrValue<U>) => AsyncGenerator<U, R, void> +> : ^ ^^ ^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ >iterable : { [Symbol.asyncIterator](): any; next(): Promise<{ done: boolean; value: number; }>; } > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >(x) => x + x : (x: number) => number diff --git a/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=true).symbols b/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=true).symbols index 16a1e57d1b016..92e1297495f1b 100644 --- a/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=true).symbols +++ b/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=true).symbols @@ -16,16 +16,17 @@ function mapAsyncIterable<T, U, R = undefined>( >U : Symbol(U, Decl(discriminateWithOptionalProperty2.ts, 4, 28)) >R : Symbol(R, Decl(discriminateWithOptionalProperty2.ts, 4, 31)) - iterable: AsyncGenerator<T, R, void> | AsyncIterable<T>, + iterable: AsyncGenerator<T, R, undefined> | AsyncIterable<T, R, undefined>, >iterable : Symbol(iterable, Decl(discriminateWithOptionalProperty2.ts, 4, 47)) >AsyncGenerator : Symbol(AsyncGenerator, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) >T : Symbol(T, Decl(discriminateWithOptionalProperty2.ts, 4, 26)) >R : Symbol(R, Decl(discriminateWithOptionalProperty2.ts, 4, 31)) >AsyncIterable : Symbol(AsyncIterable, Decl(lib.es2018.asynciterable.d.ts, --, --)) >T : Symbol(T, Decl(discriminateWithOptionalProperty2.ts, 4, 26)) +>R : Symbol(R, Decl(discriminateWithOptionalProperty2.ts, 4, 31)) callback: (value: T) => PromiseOrValue<U>, ->callback : Symbol(callback, Decl(discriminateWithOptionalProperty2.ts, 5, 58)) +>callback : Symbol(callback, Decl(discriminateWithOptionalProperty2.ts, 5, 77)) >value : Symbol(value, Decl(discriminateWithOptionalProperty2.ts, 6, 13)) >T : Symbol(T, Decl(discriminateWithOptionalProperty2.ts, 4, 26)) >PromiseOrValue : Symbol(PromiseOrValue, Decl(discriminateWithOptionalProperty2.ts, 0, 0)) @@ -70,7 +71,7 @@ function mapAsyncIterable<T, U, R = undefined>( try { return { value: await callback(result.value), done: false }; >value : Symbol(value, Decl(discriminateWithOptionalProperty2.ts, 18, 14)) ->callback : Symbol(callback, Decl(discriminateWithOptionalProperty2.ts, 5, 58)) +>callback : Symbol(callback, Decl(discriminateWithOptionalProperty2.ts, 5, 77)) >result.value : Symbol(IteratorYieldResult.value, Decl(lib.es2015.iterable.d.ts, --, --)) >result : Symbol(result, Decl(discriminateWithOptionalProperty2.ts, 10, 27)) >value : Symbol(IteratorYieldResult.value, Decl(lib.es2015.iterable.d.ts, --, --)) diff --git a/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=true).types b/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=true).types index b6b348657dfee..c378f82199043 100644 --- a/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=true).types +++ b/tests/baselines/reference/discriminateWithOptionalProperty2(exactoptionalpropertytypes=true).types @@ -8,12 +8,12 @@ type PromiseOrValue<T> = Promise<T> | T; > : ^^^^^^^^^^^^^^^^^ function mapAsyncIterable<T, U, R = undefined>( ->mapAsyncIterable : <T, U, R = undefined>(iterable: AsyncGenerator<T, R, void> | AsyncIterable<T>, callback: (value: T) => PromiseOrValue<U>) => AsyncGenerator<U, R, void> -> : ^ ^^ ^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ +>mapAsyncIterable : <T, U, R = undefined>(iterable: AsyncGenerator<T, R, undefined> | AsyncIterable<T, R, undefined>, callback: (value: T) => PromiseOrValue<U>) => AsyncGenerator<U, R, void> +> : ^ ^^ ^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ - iterable: AsyncGenerator<T, R, void> | AsyncIterable<T>, ->iterable : AsyncGenerator<T, R, void> | AsyncIterable<T> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + iterable: AsyncGenerator<T, R, undefined> | AsyncIterable<T, R, undefined>, +>iterable : AsyncGenerator<T, R, undefined> | AsyncIterable<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ callback: (value: T) => PromiseOrValue<U>, >callback : (value: T) => PromiseOrValue<U> @@ -23,14 +23,14 @@ function mapAsyncIterable<T, U, R = undefined>( ): AsyncGenerator<U, R, void> { const iterator = iterable[Symbol.asyncIterator](); ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterable[Symbol.asyncIterator]() : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterable[Symbol.asyncIterator] : (() => AsyncGenerator<T, R, void>) | (() => AsyncIterator<T, any, undefined>) -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterable : AsyncGenerator<T, R, void> | AsyncIterable<T> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterable[Symbol.asyncIterator]() : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterable[Symbol.asyncIterator] : (() => AsyncGenerator<T, R, undefined>) | (() => AsyncIterator<T, R, undefined>) +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterable : AsyncGenerator<T, R, undefined> | AsyncIterable<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >Symbol.asyncIterator : unique symbol > : ^^^^^^^^^^^^^ >Symbol : SymbolConstructor @@ -92,27 +92,27 @@ function mapAsyncIterable<T, U, R = undefined>( > : ^^^^^^^ >typeof iterator.return : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.return : ((value?: any) => Promise<IteratorResult<T, any>>) | undefined -> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->return : ((value?: any) => Promise<IteratorResult<T, any>>) | undefined -> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.return : ((value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>>) | undefined +> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>return : ((value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>>) | undefined +> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >"function" : "function" > : ^^^^^^^^^^ try { await iterator.return(); ->await iterator.return() : IteratorResult<T, any> -> : ^^^^^^^^^^^^^^^^^^^^^^ ->iterator.return() : Promise<IteratorResult<T, any>> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.return : (value?: any) => Promise<IteratorResult<T, any>> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->return : (value?: any) => Promise<IteratorResult<T, any>> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>await iterator.return() : IteratorResult<T, R> +> : ^^^^^^^^^^^^^^^^^^^^ +>iterator.return() : Promise<IteratorResult<T, R>> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.return : (value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>return : (value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ } catch (_e) {} >_e : unknown @@ -137,16 +137,16 @@ function mapAsyncIterable<T, U, R = undefined>( > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >mapResult : (result: IteratorResult<T, R>) => Promise<IteratorResult<U, R>> > : ^ ^^ ^^^^^ ->await iterator.next() : IteratorResult<T, any> -> : ^^^^^^^^^^^^^^^^^^^^^^ ->iterator.next() : Promise<IteratorResult<T, any>> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.next : (...args: [] | [undefined]) => Promise<IteratorResult<T, any>> -> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->next : (...args: [] | [undefined]) => Promise<IteratorResult<T, any>> -> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>await iterator.next() : IteratorResult<T, R> +> : ^^^^^^^^^^^^^^^^^^^^ +>iterator.next() : Promise<IteratorResult<T, R>> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.next : (...args: [] | [undefined]) => Promise<IteratorResult<T, R>> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>next : (...args: [] | [undefined]) => Promise<IteratorResult<T, R>> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ }, async return(): Promise<IteratorResult<U, R>> { @@ -160,12 +160,12 @@ function mapAsyncIterable<T, U, R = undefined>( > : ^^^^^^^ >typeof iterator.return : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.return : ((value?: any) => Promise<IteratorResult<T, any>>) | undefined -> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->return : ((value?: any) => Promise<IteratorResult<T, any>>) | undefined -> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.return : ((value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>>) | undefined +> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>return : ((value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>>) | undefined +> : ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >"function" : "function" > : ^^^^^^^^^^ @@ -174,16 +174,16 @@ function mapAsyncIterable<T, U, R = undefined>( > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >mapResult : (result: IteratorResult<T, R>) => Promise<IteratorResult<U, R>> > : ^ ^^ ^^^^^ ->await iterator.return() : IteratorResult<T, any> -> : ^^^^^^^^^^^^^^^^^^^^^^ ->iterator.return() : Promise<IteratorResult<T, any>> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.return : (value?: any) => Promise<IteratorResult<T, any>> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->return : (value?: any) => Promise<IteratorResult<T, any>> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>await iterator.return() : IteratorResult<T, R> +> : ^^^^^^^^^^^^^^^^^^^^ +>iterator.return() : Promise<IteratorResult<T, R>> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.return : (value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>return : (value?: R | PromiseLike<R> | undefined) => Promise<IteratorResult<T, R>> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ : { value: undefined as any, done: true }; >{ value: undefined as any, done: true } : { value: any; done: true; } @@ -209,12 +209,12 @@ function mapAsyncIterable<T, U, R = undefined>( > : ^^^^^^^ >typeof iterator.throw : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.throw : ((e?: any) => Promise<IteratorResult<T, any>>) | undefined -> : ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->throw : ((e?: any) => Promise<IteratorResult<T, any>>) | undefined -> : ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.throw : ((e?: any) => Promise<IteratorResult<T, R>>) | undefined +> : ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>throw : ((e?: any) => Promise<IteratorResult<T, R>>) | undefined +> : ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >"function" : "function" > : ^^^^^^^^^^ @@ -223,16 +223,16 @@ function mapAsyncIterable<T, U, R = undefined>( > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >mapResult : (result: IteratorResult<T, R>) => Promise<IteratorResult<U, R>> > : ^ ^^ ^^^^^ ->await iterator.throw(error) : IteratorResult<T, any> -> : ^^^^^^^^^^^^^^^^^^^^^^ ->iterator.throw(error) : Promise<IteratorResult<T, any>> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator.throw : (e?: any) => Promise<IteratorResult<T, any>> -> : ^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->iterator : AsyncIterator<T, any, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->throw : (e?: any) => Promise<IteratorResult<T, any>> -> : ^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>await iterator.throw(error) : IteratorResult<T, R> +> : ^^^^^^^^^^^^^^^^^^^^ +>iterator.throw(error) : Promise<IteratorResult<T, R>> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator.throw : (e?: any) => Promise<IteratorResult<T, R>> +> : ^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>iterator : AsyncIterator<T, R, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>throw : (e?: any) => Promise<IteratorResult<T, R>> +> : ^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >error : unknown > : ^^^^^^^ } @@ -355,8 +355,8 @@ const doubles = mapAsyncIterable(iterable, (x) => x + x); > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >mapAsyncIterable(iterable, (x) => x + x) : AsyncGenerator<number, number, void> > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->mapAsyncIterable : <T, U, R = undefined>(iterable: AsyncGenerator<T, R, void> | AsyncIterable<T>, callback: (value: T) => PromiseOrValue<U>) => AsyncGenerator<U, R, void> -> : ^ ^^ ^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ +>mapAsyncIterable : <T, U, R = undefined>(iterable: AsyncGenerator<T, R, undefined> | AsyncIterable<T, R, undefined>, callback: (value: T) => PromiseOrValue<U>) => AsyncGenerator<U, R, void> +> : ^ ^^ ^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ >iterable : { [Symbol.asyncIterator](): any; next(): Promise<{ done: boolean; value: number; }>; } > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >(x) => x + x : (x: number) => number diff --git a/tests/baselines/reference/emitArrowFunctionES6.types b/tests/baselines/reference/emitArrowFunctionES6.types index 472ea87102f67..3925aeeaf3766 100644 --- a/tests/baselines/reference/emitArrowFunctionES6.types +++ b/tests/baselines/reference/emitArrowFunctionES6.types @@ -79,10 +79,10 @@ var p1 = ([a]) => { }; > : ^^^ var p2 = ([...a]) => { }; ->p2 : ([...a]: Iterable<any>) => void -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^ ->([...a]) => { } : ([...a]: Iterable<any>) => void -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^ +>p2 : ([...a]: Iterable<any, void, undefined>) => void +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>([...a]) => { } : ([...a]: Iterable<any, void, undefined>) => void +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >a : any[] > : ^^^^^ diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.types b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.types index 4cc15fc48eeda..dc92b10c489ff 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.types +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2015.types @@ -46,8 +46,8 @@ class C4 { > : ^^ async * f() { ->f : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x = yield* [1]; >x : any diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2018.types b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2018.types index 754591d94ba1f..42a23acadf4ed 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2018.types +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es2018.types @@ -46,8 +46,8 @@ class C4 { > : ^^ async * f() { ->f : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x = yield* [1]; >x : any diff --git a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.types b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.types index aa7bf57541199..93ea693423f50 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.types +++ b/tests/baselines/reference/emitter.asyncGenerators.classMethods.es5.types @@ -46,8 +46,8 @@ class C4 { > : ^^ async * f() { ->f : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x = yield* [1]; >x : any diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.types b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.types index bfbf793fc22ca..d3f253300a53c 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2015.types @@ -27,8 +27,8 @@ async function * f3() { } === F4.ts === async function * f4() { ->f4 : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f4 : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x = yield* [1]; >x : any diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2018.types b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2018.types index f44884810ae8c..c9e8a861c147e 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2018.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es2018.types @@ -27,8 +27,8 @@ async function * f3() { } === F4.ts === async function * f4() { ->f4 : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f4 : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x = yield* [1]; >x : any diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.types b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.types index d542e9bd52aaa..e9f6d8a5c12e3 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionDeclarations.es5.types @@ -27,8 +27,8 @@ async function * f3() { } === F4.ts === async function * f4() { ->f4 : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f4 : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x = yield* [1]; >x : any diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.types b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.types index c375fc5c0b7eb..385726d4ec892 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2015.types @@ -33,10 +33,10 @@ const f3 = async function * () { } === F4.ts === const f4 = async function * () { ->f4 : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { const x = yield* [1];} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f4 : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { const x = yield* [1];} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x = yield* [1]; >x : any diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2018.types b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2018.types index 3072ee4edc5ff..074449e1ccf11 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2018.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es2018.types @@ -33,10 +33,10 @@ const f3 = async function * () { } === F4.ts === const f4 = async function * () { ->f4 : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { const x = yield* [1];} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f4 : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { const x = yield* [1];} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x = yield* [1]; >x : any diff --git a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.types b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.types index d48a16963a9eb..0e2315bd1ddc2 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.types +++ b/tests/baselines/reference/emitter.asyncGenerators.functionExpressions.es5.types @@ -33,10 +33,10 @@ const f3 = async function * () { } === F4.ts === const f4 = async function * () { ->f4 : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { const x = yield* [1];} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f4 : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { const x = yield* [1];} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x = yield* [1]; >x : any diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.types b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.types index 604560f8a9d1f..58de2b68a6ca4 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.types +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2015.types @@ -48,14 +48,14 @@ const o3 = { } === O4.ts === const o4 = { ->o4 : { f(): AsyncGenerator<number, void, undefined>; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->{ async * f() { const x = yield* [1]; }} : { f(): AsyncGenerator<number, void, undefined>; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>o4 : { f(): AsyncGenerator<number, void, any>; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>{ async * f() { const x = yield* [1]; }} : { f(): AsyncGenerator<number, void, any>; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ async * f() { ->f : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x = yield* [1]; >x : any diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2018.types b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2018.types index ead1acd6ef0d9..024281295e40d 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2018.types +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es2018.types @@ -48,14 +48,14 @@ const o3 = { } === O4.ts === const o4 = { ->o4 : { f(): AsyncGenerator<number, void, undefined>; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->{ async * f() { const x = yield* [1]; }} : { f(): AsyncGenerator<number, void, undefined>; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>o4 : { f(): AsyncGenerator<number, void, any>; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>{ async * f() { const x = yield* [1]; }} : { f(): AsyncGenerator<number, void, any>; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ async * f() { ->f : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x = yield* [1]; >x : any diff --git a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.types b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.types index c362f7b952b98..6bb7ecf62404c 100644 --- a/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.types +++ b/tests/baselines/reference/emitter.asyncGenerators.objectLiteralMethods.es5.types @@ -48,14 +48,14 @@ const o3 = { } === O4.ts === const o4 = { ->o4 : { f(): AsyncGenerator<number, void, undefined>; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->{ async * f() { const x = yield* [1]; }} : { f(): AsyncGenerator<number, void, undefined>; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>o4 : { f(): AsyncGenerator<number, void, any>; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>{ async * f() { const x = yield* [1]; }} : { f(): AsyncGenerator<number, void, any>; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ async * f() { ->f : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x = yield* [1]; >x : any diff --git a/tests/baselines/reference/esNextWeakRefs_IterableWeakMap.types b/tests/baselines/reference/esNextWeakRefs_IterableWeakMap.types index 0b291230cde78..d53b79137fc27 100644 --- a/tests/baselines/reference/esNextWeakRefs_IterableWeakMap.types +++ b/tests/baselines/reference/esNextWeakRefs_IterableWeakMap.types @@ -436,8 +436,7 @@ export class IterableWeakMap<K extends object, V> implements WeakMap<K, V> { > : ^ yield [key, value]; ->yield [key, value] : unknown -> : ^^^^^^^ +>yield [key, value] : any >[key, value] : [K, V] > : ^^^^^^ >key : K diff --git a/tests/baselines/reference/excessiveStackDepthFlatArray.types b/tests/baselines/reference/excessiveStackDepthFlatArray.types index d465f97fc02c5..6058609386027 100644 --- a/tests/baselines/reference/excessiveStackDepthFlatArray.types +++ b/tests/baselines/reference/excessiveStackDepthFlatArray.types @@ -1,7 +1,7 @@ //// [tests/cases/compiler/excessiveStackDepthFlatArray.ts] //// === Performance Stats === -Instantiation count: 1,000 +Instantiation count: 1,000 -> 2,500 === index.tsx === interface MiddlewareArray<T> extends Array<T> {} diff --git a/tests/baselines/reference/for-of29.errors.txt b/tests/baselines/reference/for-of29.errors.txt index 71a82303546df..f091e9dc9a694 100644 --- a/tests/baselines/reference/for-of29.errors.txt +++ b/tests/baselines/reference/for-of29.errors.txt @@ -1,4 +1,4 @@ -for-of29.ts(5,15): error TS2488: Type '{ [Symbol.iterator]?(): Iterator<string, any, undefined>; }' must have a '[Symbol.iterator]()' method that returns an iterator. +for-of29.ts(5,15): error TS2488: Type '{ [Symbol.iterator]?(): Iterator<string, any, any>; }' must have a '[Symbol.iterator]()' method that returns an iterator. ==== for-of29.ts (1 errors) ==== @@ -8,5 +8,5 @@ for-of29.ts(5,15): error TS2488: Type '{ [Symbol.iterator]?(): Iterator<string, for (var v of iterableWithOptionalIterator) { } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2488: Type '{ [Symbol.iterator]?(): Iterator<string, any, undefined>; }' must have a '[Symbol.iterator]()' method that returns an iterator. +!!! error TS2488: Type '{ [Symbol.iterator]?(): Iterator<string, any, any>; }' must have a '[Symbol.iterator]()' method that returns an iterator. \ No newline at end of file diff --git a/tests/baselines/reference/generatorReturnTypeFallback.1.types b/tests/baselines/reference/generatorReturnTypeFallback.1.types index e15ee0e2669bd..fc04c48fbaf7c 100644 --- a/tests/baselines/reference/generatorReturnTypeFallback.1.types +++ b/tests/baselines/reference/generatorReturnTypeFallback.1.types @@ -3,8 +3,8 @@ === generatorReturnTypeFallback.1.ts === // Allow generators to fallback to IterableIterator if they do not need a type for the sent value while in strictNullChecks mode. function* f() { ->f : () => IterableIterator<number> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f : () => IterableIterator<number, void, unknown> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield 1; >yield 1 : any diff --git a/tests/baselines/reference/generatorReturnTypeFallback.3.errors.txt b/tests/baselines/reference/generatorReturnTypeFallback.3.errors.txt deleted file mode 100644 index de2135daa6f7d..0000000000000 --- a/tests/baselines/reference/generatorReturnTypeFallback.3.errors.txt +++ /dev/null @@ -1,10 +0,0 @@ -error TS2318: Cannot find global type 'Generator'. - - -!!! error TS2318: Cannot find global type 'Generator'. -==== generatorReturnTypeFallback.3.ts (0 errors) ==== - // Do not allow generators to fallback to IterableIterator while in strictNullChecks mode if they need a type for the sent value. - // NOTE: In non-strictNullChecks mode, `undefined` (the default sent value) is assignable to everything. - function* f() { - const x: string = yield 1; - } \ No newline at end of file diff --git a/tests/baselines/reference/generatorReturnTypeFallback.3.symbols b/tests/baselines/reference/generatorReturnTypeFallback.3.symbols index 41d807d743be1..ce94c240f0c16 100644 --- a/tests/baselines/reference/generatorReturnTypeFallback.3.symbols +++ b/tests/baselines/reference/generatorReturnTypeFallback.3.symbols @@ -1,11 +1,9 @@ //// [tests/cases/conformance/generators/generatorReturnTypeFallback.3.ts] //// === generatorReturnTypeFallback.3.ts === -// Do not allow generators to fallback to IterableIterator while in strictNullChecks mode if they need a type for the sent value. -// NOTE: In non-strictNullChecks mode, `undefined` (the default sent value) is assignable to everything. function* f() { >f : Symbol(f, Decl(generatorReturnTypeFallback.3.ts, 0, 0)) const x: string = yield 1; ->x : Symbol(x, Decl(generatorReturnTypeFallback.3.ts, 3, 9)) +>x : Symbol(x, Decl(generatorReturnTypeFallback.3.ts, 1, 9)) } diff --git a/tests/baselines/reference/generatorReturnTypeFallback.3.types b/tests/baselines/reference/generatorReturnTypeFallback.3.types index 54c5039049bea..2bc88213fc3fa 100644 --- a/tests/baselines/reference/generatorReturnTypeFallback.3.types +++ b/tests/baselines/reference/generatorReturnTypeFallback.3.types @@ -1,17 +1,14 @@ //// [tests/cases/conformance/generators/generatorReturnTypeFallback.3.ts] //// === generatorReturnTypeFallback.3.ts === -// Do not allow generators to fallback to IterableIterator while in strictNullChecks mode if they need a type for the sent value. -// NOTE: In non-strictNullChecks mode, `undefined` (the default sent value) is assignable to everything. function* f() { ->f : () => {} -> : ^^^^^^^^ +>f : () => IterableIterator<number, void, string> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x: string = yield 1; >x : string > : ^^^^^^ >yield 1 : any -> : ^^^ >1 : 1 > : ^ } diff --git a/tests/baselines/reference/generatorReturnTypeFallback.4.types b/tests/baselines/reference/generatorReturnTypeFallback.4.types index acd098251ee9d..eb3fbef238dce 100644 --- a/tests/baselines/reference/generatorReturnTypeFallback.4.types +++ b/tests/baselines/reference/generatorReturnTypeFallback.4.types @@ -4,8 +4,8 @@ // Allow generators to fallback to IterableIterator if they are not in strictNullChecks mode // NOTE: In non-strictNullChecks mode, `undefined` (the default sent value) is assignable to everything. function* f() { ->f : () => IterableIterator<number> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f : () => IterableIterator<number, void, string> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ const x: string = yield 1; >x : string diff --git a/tests/baselines/reference/generatorReturnTypeFallback.5.types b/tests/baselines/reference/generatorReturnTypeFallback.5.types index 7d85ccb1af79c..a3eab2c4e3bd2 100644 --- a/tests/baselines/reference/generatorReturnTypeFallback.5.types +++ b/tests/baselines/reference/generatorReturnTypeFallback.5.types @@ -7,8 +7,7 @@ function* f(): IterableIterator<number> { > : ^^^^^^ yield 1; ->yield 1 : undefined -> : ^^^^^^^^^ +>yield 1 : any >1 : 1 > : ^ } diff --git a/tests/baselines/reference/generatorReturnTypeInference.types b/tests/baselines/reference/generatorReturnTypeInference.types index a2ad28e5e30a1..e6249102d6437 100644 --- a/tests/baselines/reference/generatorReturnTypeInference.types +++ b/tests/baselines/reference/generatorReturnTypeInference.types @@ -40,8 +40,8 @@ function* g002() { // Generator<number, void, unknown> } function* g003() { // Generator<never, void, undefined> ->g003 : () => Generator<never, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>g003 : () => Generator<never, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* []; >yield* [] : any @@ -51,8 +51,8 @@ function* g003() { // Generator<never, void, undefined> } function* g004() { // Generator<number, void, undefined> ->g004 : () => Generator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>g004 : () => Generator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* iterableIterator; >yield* iterableIterator : any diff --git a/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.types b/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.types index f52fb7eaeb022..03155f5fd2b4e 100644 --- a/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.types +++ b/tests/baselines/reference/generatorReturnTypeInferenceNonStrict.types @@ -40,8 +40,8 @@ function* g002() { // Generator<number, void, unknown> } function* g003() { // Generator<any (implicit), void, unknown> ->g003 : () => Generator<any, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>g003 : () => Generator<any, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // NOTE: In strict mode, `[]` produces the type `never[]`. // In non-strict mode, `[]` produces the type `undefined[]` which is implicitly any. @@ -53,8 +53,8 @@ function* g003() { // Generator<any (implicit), void, unknown> } function* g004() { // Generator<number, void, undefined> ->g004 : () => Generator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>g004 : () => Generator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* iterableIterator; >yield* iterableIterator : any diff --git a/tests/baselines/reference/generatorTypeCheck11.js b/tests/baselines/reference/generatorTypeCheck11.js index 09d30ea001b3d..7d9b616a264b2 100644 --- a/tests/baselines/reference/generatorTypeCheck11.js +++ b/tests/baselines/reference/generatorTypeCheck11.js @@ -1,7 +1,7 @@ //// [tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck11.ts] //// //// [generatorTypeCheck11.ts] -function* g(): IterableIterator<number> { +function* g(): IterableIterator<number, number> { return 0; } diff --git a/tests/baselines/reference/generatorTypeCheck11.symbols b/tests/baselines/reference/generatorTypeCheck11.symbols index f5f3ce3fdde53..44a4c4d62310e 100644 --- a/tests/baselines/reference/generatorTypeCheck11.symbols +++ b/tests/baselines/reference/generatorTypeCheck11.symbols @@ -1,7 +1,7 @@ //// [tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck11.ts] //// === generatorTypeCheck11.ts === -function* g(): IterableIterator<number> { +function* g(): IterableIterator<number, number> { >g : Symbol(g, Decl(generatorTypeCheck11.ts, 0, 0)) >IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) diff --git a/tests/baselines/reference/generatorTypeCheck11.types b/tests/baselines/reference/generatorTypeCheck11.types index dda8baa38dc4a..b1788b17a91db 100644 --- a/tests/baselines/reference/generatorTypeCheck11.types +++ b/tests/baselines/reference/generatorTypeCheck11.types @@ -1,9 +1,9 @@ //// [tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck11.ts] //// === generatorTypeCheck11.ts === -function* g(): IterableIterator<number> { ->g : () => IterableIterator<number> -> : ^^^^^^ +function* g(): IterableIterator<number, number> { +>g : () => IterableIterator<number, number> +> : ^^^^^^ return 0; >0 : 0 diff --git a/tests/baselines/reference/generatorTypeCheck12.js b/tests/baselines/reference/generatorTypeCheck12.js index 5ea3a5e9a7ee2..4acc1e520580b 100644 --- a/tests/baselines/reference/generatorTypeCheck12.js +++ b/tests/baselines/reference/generatorTypeCheck12.js @@ -1,7 +1,7 @@ //// [tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck12.ts] //// //// [generatorTypeCheck12.ts] -function* g(): IterableIterator<number> { +function* g(): IterableIterator<number, string> { return ""; } diff --git a/tests/baselines/reference/generatorTypeCheck12.symbols b/tests/baselines/reference/generatorTypeCheck12.symbols index 8fd6746b19d2a..d66acfb2ace76 100644 --- a/tests/baselines/reference/generatorTypeCheck12.symbols +++ b/tests/baselines/reference/generatorTypeCheck12.symbols @@ -1,7 +1,7 @@ //// [tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck12.ts] //// === generatorTypeCheck12.ts === -function* g(): IterableIterator<number> { +function* g(): IterableIterator<number, string> { >g : Symbol(g, Decl(generatorTypeCheck12.ts, 0, 0)) >IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) diff --git a/tests/baselines/reference/generatorTypeCheck12.types b/tests/baselines/reference/generatorTypeCheck12.types index 407f05e6f391c..4a55e92a7d1aa 100644 --- a/tests/baselines/reference/generatorTypeCheck12.types +++ b/tests/baselines/reference/generatorTypeCheck12.types @@ -1,9 +1,9 @@ //// [tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck12.ts] //// === generatorTypeCheck12.ts === -function* g(): IterableIterator<number> { ->g : () => IterableIterator<number> -> : ^^^^^^ +function* g(): IterableIterator<number, string> { +>g : () => IterableIterator<number, string> +> : ^^^^^^ return ""; >"" : "" diff --git a/tests/baselines/reference/generatorTypeCheck13.js b/tests/baselines/reference/generatorTypeCheck13.js index 1a743854ab2da..a447f44ea86ae 100644 --- a/tests/baselines/reference/generatorTypeCheck13.js +++ b/tests/baselines/reference/generatorTypeCheck13.js @@ -1,7 +1,7 @@ //// [tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck13.ts] //// //// [generatorTypeCheck13.ts] -function* g(): IterableIterator<number> { +function* g(): IterableIterator<number, string> { yield 0; return ""; } diff --git a/tests/baselines/reference/generatorTypeCheck13.symbols b/tests/baselines/reference/generatorTypeCheck13.symbols index e2a80949d6c1d..71557b215c836 100644 --- a/tests/baselines/reference/generatorTypeCheck13.symbols +++ b/tests/baselines/reference/generatorTypeCheck13.symbols @@ -1,7 +1,7 @@ //// [tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck13.ts] //// === generatorTypeCheck13.ts === -function* g(): IterableIterator<number> { +function* g(): IterableIterator<number, string> { >g : Symbol(g, Decl(generatorTypeCheck13.ts, 0, 0)) >IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) diff --git a/tests/baselines/reference/generatorTypeCheck13.types b/tests/baselines/reference/generatorTypeCheck13.types index 85f6e91aefdd9..6144546acc248 100644 --- a/tests/baselines/reference/generatorTypeCheck13.types +++ b/tests/baselines/reference/generatorTypeCheck13.types @@ -1,13 +1,12 @@ //// [tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck13.ts] //// === generatorTypeCheck13.ts === -function* g(): IterableIterator<number> { ->g : () => IterableIterator<number> -> : ^^^^^^ +function* g(): IterableIterator<number, string> { +>g : () => IterableIterator<number, string> +> : ^^^^^^ yield 0; ->yield 0 : undefined -> : ^^^^^^^^^ +>yield 0 : any >0 : 0 > : ^ diff --git a/tests/baselines/reference/generatorTypeCheck17.types b/tests/baselines/reference/generatorTypeCheck17.types index f163aad700ceb..4f10af02fab72 100644 --- a/tests/baselines/reference/generatorTypeCheck17.types +++ b/tests/baselines/reference/generatorTypeCheck17.types @@ -20,12 +20,10 @@ function* g(): IterableIterator<Foo> { > : ^^^^^^ yield; ->yield : undefined -> : ^^^^^^^^^ +>yield : any yield new Bar; ->yield new Bar : undefined -> : ^^^^^^^^^ +>yield new Bar : any >new Bar : Bar > : ^^^ >Bar : typeof Bar diff --git a/tests/baselines/reference/generatorTypeCheck18.types b/tests/baselines/reference/generatorTypeCheck18.types index d9c9694e47213..a7d2eca6795f2 100644 --- a/tests/baselines/reference/generatorTypeCheck18.types +++ b/tests/baselines/reference/generatorTypeCheck18.types @@ -18,12 +18,12 @@ function* g(): IterableIterator<Foo> { > : ^^^^^^ yield; ->yield : undefined -> : ^^^^^^^^^ +>yield : any +> : ^^^ yield new Baz; ->yield new Baz : undefined -> : ^^^^^^^^^ +>yield new Baz : any +> : ^^^ >new Baz : Baz > : ^^^ >Baz : typeof Baz diff --git a/tests/baselines/reference/generatorTypeCheck19.types b/tests/baselines/reference/generatorTypeCheck19.types index 9faf23c7ad3ce..b25b28b31670b 100644 --- a/tests/baselines/reference/generatorTypeCheck19.types +++ b/tests/baselines/reference/generatorTypeCheck19.types @@ -20,8 +20,7 @@ function* g(): IterableIterator<Foo> { > : ^^^^^^ yield; ->yield : undefined -> : ^^^^^^^^^ +>yield : any yield * [new Bar]; >yield * [new Bar] : any diff --git a/tests/baselines/reference/generatorTypeCheck20.types b/tests/baselines/reference/generatorTypeCheck20.types index 243a849924d61..469c7036bbefb 100644 --- a/tests/baselines/reference/generatorTypeCheck20.types +++ b/tests/baselines/reference/generatorTypeCheck20.types @@ -18,8 +18,8 @@ function* g(): IterableIterator<Foo> { > : ^^^^^^ yield; ->yield : undefined -> : ^^^^^^^^^ +>yield : any +> : ^^^ yield * [new Baz]; >yield * [new Baz] : any diff --git a/tests/baselines/reference/generatorTypeCheck21.types b/tests/baselines/reference/generatorTypeCheck21.types index 58cc46f34578e..55f2d96377a23 100644 --- a/tests/baselines/reference/generatorTypeCheck21.types +++ b/tests/baselines/reference/generatorTypeCheck21.types @@ -20,8 +20,8 @@ function* g(): IterableIterator<Foo> { > : ^^^^^^ yield; ->yield : undefined -> : ^^^^^^^^^ +>yield : any +> : ^^^ yield * new Bar; >yield * new Bar : any diff --git a/tests/baselines/reference/generatorTypeCheck22.types b/tests/baselines/reference/generatorTypeCheck22.types index 73246839319ed..f8f6580b45433 100644 --- a/tests/baselines/reference/generatorTypeCheck22.types +++ b/tests/baselines/reference/generatorTypeCheck22.types @@ -22,8 +22,8 @@ class Baz { z: number } > : ^^^^^^ function* g3() { ->g3 : () => Generator<Bar | Baz, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>g3 : () => Generator<Bar | Baz, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield; >yield : any diff --git a/tests/baselines/reference/generatorTypeCheck23.types b/tests/baselines/reference/generatorTypeCheck23.types index 52056e44274b5..50e76794cc437 100644 --- a/tests/baselines/reference/generatorTypeCheck23.types +++ b/tests/baselines/reference/generatorTypeCheck23.types @@ -22,8 +22,8 @@ class Baz { z: number } > : ^^^^^^ function* g3() { ->g3 : () => Generator<Foo | Baz, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>g3 : () => Generator<Foo | Baz, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield; >yield : any diff --git a/tests/baselines/reference/generatorTypeCheck24.types b/tests/baselines/reference/generatorTypeCheck24.types index 0f243defbf3b6..d0869e1134889 100644 --- a/tests/baselines/reference/generatorTypeCheck24.types +++ b/tests/baselines/reference/generatorTypeCheck24.types @@ -22,8 +22,8 @@ class Baz { z: number } > : ^^^^^^ function* g3() { ->g3 : () => Generator<Foo | Baz, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>g3 : () => Generator<Foo | Baz, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield; >yield : any diff --git a/tests/baselines/reference/generatorTypeCheck25.errors.txt b/tests/baselines/reference/generatorTypeCheck25.errors.txt index ab28ce3ace486..2113fedd55fd5 100644 --- a/tests/baselines/reference/generatorTypeCheck25.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck25.errors.txt @@ -1,5 +1,5 @@ -generatorTypeCheck25.ts(4,5): error TS2322: Type '() => Generator<Bar | Baz, void, undefined>' is not assignable to type '() => Iterable<Foo>'. - Call signature return types 'Generator<Bar | Baz, void, undefined>' and 'Iterable<Foo>' are incompatible. +generatorTypeCheck25.ts(4,5): error TS2322: Type '() => Generator<Bar | Baz, void, any>' is not assignable to type '() => Iterable<Foo>'. + Call signature return types 'Generator<Bar | Baz, void, any>' and 'Iterable<Foo>' are incompatible. The types returned by '[Symbol.iterator]().next(...)' are incompatible between these types. Type 'IteratorResult<Bar | Baz, void>' is not assignable to type 'IteratorResult<Foo, any>'. Type 'IteratorYieldResult<Bar | Baz>' is not assignable to type 'IteratorResult<Foo, any>'. @@ -14,8 +14,8 @@ generatorTypeCheck25.ts(4,5): error TS2322: Type '() => Generator<Bar | Baz, voi class Baz { z: number } var g3: () => Iterable<Foo> = function* () { ~~ -!!! error TS2322: Type '() => Generator<Bar | Baz, void, undefined>' is not assignable to type '() => Iterable<Foo>'. -!!! error TS2322: Call signature return types 'Generator<Bar | Baz, void, undefined>' and 'Iterable<Foo>' are incompatible. +!!! error TS2322: Type '() => Generator<Bar | Baz, void, any>' is not assignable to type '() => Iterable<Foo>'. +!!! error TS2322: Call signature return types 'Generator<Bar | Baz, void, any>' and 'Iterable<Foo>' are incompatible. !!! error TS2322: The types returned by '[Symbol.iterator]().next(...)' are incompatible between these types. !!! error TS2322: Type 'IteratorResult<Bar | Baz, void>' is not assignable to type 'IteratorResult<Foo, any>'. !!! error TS2322: Type 'IteratorYieldResult<Bar | Baz>' is not assignable to type 'IteratorResult<Foo, any>'. diff --git a/tests/baselines/reference/generatorTypeCheck25.types b/tests/baselines/reference/generatorTypeCheck25.types index 21c909b1895c5..322bb4b92688c 100644 --- a/tests/baselines/reference/generatorTypeCheck25.types +++ b/tests/baselines/reference/generatorTypeCheck25.types @@ -24,24 +24,24 @@ class Baz { z: number } var g3: () => Iterable<Foo> = function* () { >g3 : () => Iterable<Foo> > : ^^^^^^ ->function* () { yield; yield new Bar; yield new Baz; yield *[new Bar]; yield *[new Baz];} : () => Generator<Bar | Baz, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function* () { yield; yield new Bar; yield new Baz; yield *[new Bar]; yield *[new Baz];} : () => Generator<Bar | Baz, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield; ->yield : undefined -> : ^^^^^^^^^ +>yield : any +> : ^^^ yield new Bar; ->yield new Bar : undefined -> : ^^^^^^^^^ +>yield new Bar : any +> : ^^^ >new Bar : Bar > : ^^^ >Bar : typeof Bar > : ^^^^^^^^^^ yield new Baz; ->yield new Baz : undefined -> : ^^^^^^^^^ +>yield new Baz : any +> : ^^^ >new Baz : Baz > : ^^^ >Baz : typeof Baz diff --git a/tests/baselines/reference/generatorTypeCheck26.js b/tests/baselines/reference/generatorTypeCheck26.js index 5bb74d893adcf..5004a9aa05223 100644 --- a/tests/baselines/reference/generatorTypeCheck26.js +++ b/tests/baselines/reference/generatorTypeCheck26.js @@ -1,7 +1,7 @@ //// [tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck26.ts] //// //// [generatorTypeCheck26.ts] -function* g(): IterableIterator<(x: string) => number> { +function* g(): IterableIterator<(x: string) => number, (x: string) => number> { yield x => x.length; yield *[x => x.length]; return x => x.length; diff --git a/tests/baselines/reference/generatorTypeCheck26.symbols b/tests/baselines/reference/generatorTypeCheck26.symbols index c625c5fda15a2..3bc5d87349097 100644 --- a/tests/baselines/reference/generatorTypeCheck26.symbols +++ b/tests/baselines/reference/generatorTypeCheck26.symbols @@ -1,10 +1,11 @@ //// [tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck26.ts] //// === generatorTypeCheck26.ts === -function* g(): IterableIterator<(x: string) => number> { +function* g(): IterableIterator<(x: string) => number, (x: string) => number> { >g : Symbol(g, Decl(generatorTypeCheck26.ts, 0, 0)) >IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) >x : Symbol(x, Decl(generatorTypeCheck26.ts, 0, 33)) +>x : Symbol(x, Decl(generatorTypeCheck26.ts, 0, 56)) yield x => x.length; >x : Symbol(x, Decl(generatorTypeCheck26.ts, 1, 9)) @@ -20,5 +21,7 @@ function* g(): IterableIterator<(x: string) => number> { return x => x.length; >x : Symbol(x, Decl(generatorTypeCheck26.ts, 3, 10)) +>x.length : Symbol(String.length, Decl(lib.es5.d.ts, --, --)) >x : Symbol(x, Decl(generatorTypeCheck26.ts, 3, 10)) +>length : Symbol(String.length, Decl(lib.es5.d.ts, --, --)) } diff --git a/tests/baselines/reference/generatorTypeCheck26.types b/tests/baselines/reference/generatorTypeCheck26.types index 013714b09580d..7f75848a3357d 100644 --- a/tests/baselines/reference/generatorTypeCheck26.types +++ b/tests/baselines/reference/generatorTypeCheck26.types @@ -1,15 +1,16 @@ //// [tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck26.ts] //// === generatorTypeCheck26.ts === -function* g(): IterableIterator<(x: string) => number> { ->g : () => IterableIterator<(x: string) => number> -> : ^^^^^^ +function* g(): IterableIterator<(x: string) => number, (x: string) => number> { +>g : () => IterableIterator<(x: string) => number, (x: string) => number> +> : ^^^^^^ +>x : string +> : ^^^^^^ >x : string > : ^^^^^^ yield x => x.length; ->yield x => x.length : undefined -> : ^^^^^^^^^ +>yield x => x.length : any >x => x.length : (x: string) => number > : ^ ^^^^^^^^^^^^^^^^^^^ >x : string @@ -37,12 +38,14 @@ function* g(): IterableIterator<(x: string) => number> { > : ^^^^^^ return x => x.length; ->x => x.length : (x: any) => any -> : ^ ^^^^^^^^^^^^^ ->x : any ->x.length : any ->x : any -> : ^^^ ->length : any -> : ^^^ +>x => x.length : (x: string) => number +> : ^ ^^^^^^^^^^^^^^^^^^^ +>x : string +> : ^^^^^^ +>x.length : number +> : ^^^^^^ +>x : string +> : ^^^^^^ +>length : number +> : ^^^^^^ } diff --git a/tests/baselines/reference/generatorTypeCheck27.types b/tests/baselines/reference/generatorTypeCheck27.types index 407ed12838649..fabc419cdbfad 100644 --- a/tests/baselines/reference/generatorTypeCheck27.types +++ b/tests/baselines/reference/generatorTypeCheck27.types @@ -10,14 +10,13 @@ function* g(): IterableIterator<(x: string) => number> { yield * function* () { >yield * function* () { yield x => x.length; } () : void > : ^^^^ ->function* () { yield x => x.length; } () : Generator<(x: string) => number, void, undefined> -> : ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->function* () { yield x => x.length; } : () => Generator<(x: string) => number, void, undefined> -> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function* () { yield x => x.length; } () : Generator<(x: string) => number, void, any> +> : ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function* () { yield x => x.length; } : () => Generator<(x: string) => number, void, any> +> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield x => x.length; ->yield x => x.length : undefined -> : ^^^^^^^^^ +>yield x => x.length : any >x => x.length : (x: string) => number > : ^ ^^^^^^^^^^^^^^^^^^^ >x : string diff --git a/tests/baselines/reference/generatorTypeCheck28.types b/tests/baselines/reference/generatorTypeCheck28.types index c7675a7248536..be2015e367105 100644 --- a/tests/baselines/reference/generatorTypeCheck28.types +++ b/tests/baselines/reference/generatorTypeCheck28.types @@ -10,12 +10,12 @@ function* g(): IterableIterator<(x: string) => number> { yield * { >yield * { *[Symbol.iterator]() { yield x => x.length; } } : void > : ^^^^ ->{ *[Symbol.iterator]() { yield x => x.length; } } : { [Symbol.iterator](): Generator<(x: string) => number, void, undefined>; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>{ *[Symbol.iterator]() { yield x => x.length; } } : { [Symbol.iterator](): Generator<(x: string) => number, void, any>; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ *[Symbol.iterator]() { ->[Symbol.iterator] : () => Generator<(x: string) => number, void, undefined> -> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>[Symbol.iterator] : () => Generator<(x: string) => number, void, any> +> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >Symbol.iterator : unique symbol > : ^^^^^^^^^^^^^ >Symbol : SymbolConstructor @@ -24,8 +24,7 @@ function* g(): IterableIterator<(x: string) => number> { > : ^^^^^^^^^^^^^ yield x => x.length; ->yield x => x.length : undefined -> : ^^^^^^^^^ +>yield x => x.length : any >x => x.length : (x: string) => number > : ^ ^^^^^^^^^^^^^^^^^^^ >x : string diff --git a/tests/baselines/reference/generatorTypeCheck29.types b/tests/baselines/reference/generatorTypeCheck29.types index c8420f3d22938..2056a0db6323b 100644 --- a/tests/baselines/reference/generatorTypeCheck29.types +++ b/tests/baselines/reference/generatorTypeCheck29.types @@ -8,16 +8,14 @@ function* g2(): Iterator<Iterable<(x: string) => number>> { > : ^^^^^^ yield function* () { ->yield function* () { yield x => x.length; } () : undefined -> : ^^^^^^^^^ ->function* () { yield x => x.length; } () : Generator<(x: string) => number, void, undefined> -> : ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->function* () { yield x => x.length; } : () => Generator<(x: string) => number, void, undefined> -> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield function* () { yield x => x.length; } () : any +>function* () { yield x => x.length; } () : Generator<(x: string) => number, void, any> +> : ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function* () { yield x => x.length; } : () => Generator<(x: string) => number, void, any> +> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield x => x.length; ->yield x => x.length : undefined -> : ^^^^^^^^^ +>yield x => x.length : any >x => x.length : (x: string) => number > : ^ ^^^^^^^^^^^^^^^^^^^ >x : string diff --git a/tests/baselines/reference/generatorTypeCheck30.types b/tests/baselines/reference/generatorTypeCheck30.types index bbb0e9be9f6dd..dacc0a2b8bc25 100644 --- a/tests/baselines/reference/generatorTypeCheck30.types +++ b/tests/baselines/reference/generatorTypeCheck30.types @@ -8,16 +8,14 @@ function* g2(): Iterator<Iterable<(x: string) => number>> { > : ^^^^^^ yield function* () { ->yield function* () { yield x => x.length; } () : undefined -> : ^^^^^^^^^ ->function* () { yield x => x.length; } () : Generator<(x: string) => number, void, undefined> -> : ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->function* () { yield x => x.length; } : () => Generator<(x: string) => number, void, undefined> -> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield function* () { yield x => x.length; } () : any +>function* () { yield x => x.length; } () : Generator<(x: string) => number, void, any> +> : ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function* () { yield x => x.length; } : () => Generator<(x: string) => number, void, any> +> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield x => x.length; ->yield x => x.length : undefined -> : ^^^^^^^^^ +>yield x => x.length : any >x => x.length : (x: string) => number > : ^ ^^^^^^^^^^^^^^^^^^^ >x : string diff --git a/tests/baselines/reference/generatorTypeCheck31.types b/tests/baselines/reference/generatorTypeCheck31.types index 18130e17dfa3c..9bbb95c88d2cb 100644 --- a/tests/baselines/reference/generatorTypeCheck31.types +++ b/tests/baselines/reference/generatorTypeCheck31.types @@ -8,8 +8,8 @@ function* g2(): Iterator<() => Iterable<(x: string) => number>> { > : ^^^^^^ yield function* () { ->yield function* () { yield x => x.length; } () : undefined -> : ^^^^^^^^^ +>yield function* () { yield x => x.length; } () : any +> : ^^^ >function* () { yield x => x.length; } () : Generator<(x: any) => any, void, unknown> > : ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >function* () { yield x => x.length; } : () => Generator<(x: any) => any, void, unknown> diff --git a/tests/baselines/reference/generatorTypeCheck45.types b/tests/baselines/reference/generatorTypeCheck45.types index d8577d007c9f7..edb905d1866a0 100644 --- a/tests/baselines/reference/generatorTypeCheck45.types +++ b/tests/baselines/reference/generatorTypeCheck45.types @@ -22,10 +22,9 @@ foo("", function* () { yield x => x.length }, p => undefined); // T is fixed, sh > : ^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^^^ >"" : "" > : ^^ ->function* () { yield x => x.length } : () => Generator<(x: string) => number, void, undefined> -> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->yield x => x.length : undefined -> : ^^^^^^^^^ +>function* () { yield x => x.length } : () => Generator<(x: string) => number, void, any> +> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield x => x.length : any >x => x.length : (x: string) => number > : ^ ^^^^^^^^^^^^^^^^^^^ >x : string diff --git a/tests/baselines/reference/generatorTypeCheck46.types b/tests/baselines/reference/generatorTypeCheck46.types index 681fe2cb930c8..ee34af45e0b17 100644 --- a/tests/baselines/reference/generatorTypeCheck46.types +++ b/tests/baselines/reference/generatorTypeCheck46.types @@ -22,18 +22,18 @@ foo("", function* () { > : ^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^^^ >"" : "" > : ^^ ->function* () { yield* { *[Symbol.iterator]() { yield x => x.length } }} : () => Generator<(x: string) => number, void, undefined> -> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function* () { yield* { *[Symbol.iterator]() { yield x => x.length } }} : () => Generator<(x: string) => number, void, any> +> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* { >yield* { *[Symbol.iterator]() { yield x => x.length } } : void > : ^^^^ ->{ *[Symbol.iterator]() { yield x => x.length } } : { [Symbol.iterator](): Generator<(x: string) => number, void, undefined>; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>{ *[Symbol.iterator]() { yield x => x.length } } : { [Symbol.iterator](): Generator<(x: string) => number, void, any>; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ *[Symbol.iterator]() { ->[Symbol.iterator] : () => Generator<(x: string) => number, void, undefined> -> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>[Symbol.iterator] : () => Generator<(x: string) => number, void, any> +> : ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >Symbol.iterator : unique symbol > : ^^^^^^^^^^^^^ >Symbol : SymbolConstructor @@ -42,8 +42,7 @@ foo("", function* () { > : ^^^^^^^^^^^^^ yield x => x.length ->yield x => x.length : undefined -> : ^^^^^^^^^ +>yield x => x.length : any >x => x.length : (x: string) => number > : ^ ^^^^^^^^^^^^^^^^^^^ >x : string diff --git a/tests/baselines/reference/generatorTypeCheck53.types b/tests/baselines/reference/generatorTypeCheck53.types index 139ca5904a94b..308c3c45f0e42 100644 --- a/tests/baselines/reference/generatorTypeCheck53.types +++ b/tests/baselines/reference/generatorTypeCheck53.types @@ -14,8 +14,8 @@ class Baz { z: number } > : ^^^^^^ function* g() { ->g : () => Generator<Foo | Baz, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>g : () => Generator<Foo | Baz, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield new Foo; >yield new Foo : any diff --git a/tests/baselines/reference/generatorTypeCheck54.types b/tests/baselines/reference/generatorTypeCheck54.types index 0bb7b4e37d61c..3162d1537f12c 100644 --- a/tests/baselines/reference/generatorTypeCheck54.types +++ b/tests/baselines/reference/generatorTypeCheck54.types @@ -14,8 +14,8 @@ class Baz { z: number } > : ^^^^^^ function* g() { ->g : () => Generator<Foo | Baz, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>g : () => Generator<Foo | Baz, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* [new Foo]; >yield* [new Foo] : any diff --git a/tests/baselines/reference/generatorTypeCheck62.errors.txt b/tests/baselines/reference/generatorTypeCheck62.errors.txt new file mode 100644 index 0000000000000..6599e8fdd0109 --- /dev/null +++ b/tests/baselines/reference/generatorTypeCheck62.errors.txt @@ -0,0 +1,69 @@ +generatorTypeCheck62.ts(24,62): error TS2345: Argument of type '(state: State) => Generator<never, State, any>' is not assignable to parameter of type '(a: State) => IterableIterator<State, void>'. + Call signature return types 'Generator<never, State, any>' and 'IterableIterator<State, void>' are incompatible. + The types returned by 'next(...)' are incompatible between these types. + Type 'IteratorResult<never, State>' is not assignable to type 'IteratorResult<State, void>'. + Type 'IteratorReturnResult<State>' is not assignable to type 'IteratorResult<State, void>'. + Type 'IteratorReturnResult<State>' is not assignable to type 'IteratorReturnResult<void>'. + Type 'State' is not assignable to type 'void'. +generatorTypeCheck62.ts(32,62): error TS2345: Argument of type '(state: State) => Generator<any, State, any>' is not assignable to parameter of type '(a: any) => IterableIterator<any, void>'. + Call signature return types 'Generator<any, State, any>' and 'IterableIterator<any, void>' are incompatible. + The types returned by 'next(...)' are incompatible between these types. + Type 'IteratorResult<any, State>' is not assignable to type 'IteratorResult<any, void>'. + Type 'IteratorReturnResult<State>' is not assignable to type 'IteratorResult<any, void>'. + Type 'IteratorReturnResult<State>' is not assignable to type 'IteratorReturnResult<void>'. + Type 'State' is not assignable to type 'void'. + + +==== generatorTypeCheck62.ts (2 errors) ==== + export interface StrategicState { + lastStrategyApplied?: string; + } + + export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>): (a: T) => IterableIterator<T | undefined, void> { + return function*(state) { + for (const next of gen(state)) { + if (next) { + next.lastStrategyApplied = stratName; + } + yield next; + } + } + } + + export interface Strategy<T> { + (a: T): IterableIterator<T | undefined, void>; + } + + export interface State extends StrategicState { + foo: number; + } + + export const Nothing1: Strategy<State> = strategy("Nothing", function*(state: State) { + ~~~~~~~~ +!!! error TS2345: Argument of type '(state: State) => Generator<never, State, any>' is not assignable to parameter of type '(a: State) => IterableIterator<State, void>'. +!!! error TS2345: Call signature return types 'Generator<never, State, any>' and 'IterableIterator<State, void>' are incompatible. +!!! error TS2345: The types returned by 'next(...)' are incompatible between these types. +!!! error TS2345: Type 'IteratorResult<never, State>' is not assignable to type 'IteratorResult<State, void>'. +!!! error TS2345: Type 'IteratorReturnResult<State>' is not assignable to type 'IteratorResult<State, void>'. +!!! error TS2345: Type 'IteratorReturnResult<State>' is not assignable to type 'IteratorReturnResult<void>'. +!!! error TS2345: Type 'State' is not assignable to type 'void'. + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. + }); + + export const Nothing2: Strategy<State> = strategy("Nothing", function*(state: State) { + yield state; + }); + + export const Nothing3: Strategy<State> = strategy("Nothing", function* (state: State) { + ~~~~~~~~ +!!! error TS2345: Argument of type '(state: State) => Generator<any, State, any>' is not assignable to parameter of type '(a: any) => IterableIterator<any, void>'. +!!! error TS2345: Call signature return types 'Generator<any, State, any>' and 'IterableIterator<any, void>' are incompatible. +!!! error TS2345: The types returned by 'next(...)' are incompatible between these types. +!!! error TS2345: Type 'IteratorResult<any, State>' is not assignable to type 'IteratorResult<any, void>'. +!!! error TS2345: Type 'IteratorReturnResult<State>' is not assignable to type 'IteratorResult<any, void>'. +!!! error TS2345: Type 'IteratorReturnResult<State>' is not assignable to type 'IteratorReturnResult<void>'. +!!! error TS2345: Type 'State' is not assignable to type 'void'. + yield ; + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. + }); + \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck62.js b/tests/baselines/reference/generatorTypeCheck62.js index 9ca8500b6f1bb..b07e7b95dd9f4 100644 --- a/tests/baselines/reference/generatorTypeCheck62.js +++ b/tests/baselines/reference/generatorTypeCheck62.js @@ -5,7 +5,7 @@ export interface StrategicState { lastStrategyApplied?: string; } -export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>): (a: T) => IterableIterator<T | undefined> { +export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>): (a: T) => IterableIterator<T | undefined, void> { return function*(state) { for (const next of gen(state)) { if (next) { @@ -17,7 +17,7 @@ export function strategy<T extends StrategicState>(stratName: string, gen: (a: T } export interface Strategy<T> { - (a: T): IterableIterator<T | undefined>; + (a: T): IterableIterator<T | undefined, void>; } export interface State extends StrategicState { @@ -25,7 +25,7 @@ export interface State extends StrategicState { } export const Nothing1: Strategy<State> = strategy("Nothing", function*(state: State) { - return state; + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); export const Nothing2: Strategy<State> = strategy("Nothing", function*(state: State) { @@ -34,7 +34,7 @@ export const Nothing2: Strategy<State> = strategy("Nothing", function*(state: St export const Nothing3: Strategy<State> = strategy("Nothing", function* (state: State) { yield ; - return state; + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); @@ -54,12 +54,12 @@ function strategy(stratName, gen) { }; } exports.Nothing1 = strategy("Nothing", function* (state) { - return state; + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); exports.Nothing2 = strategy("Nothing", function* (state) { yield state; }); exports.Nothing3 = strategy("Nothing", function* (state) { yield; - return state; + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); diff --git a/tests/baselines/reference/generatorTypeCheck62.symbols b/tests/baselines/reference/generatorTypeCheck62.symbols index 025a0b5277ef5..ba66910de74e7 100644 --- a/tests/baselines/reference/generatorTypeCheck62.symbols +++ b/tests/baselines/reference/generatorTypeCheck62.symbols @@ -8,7 +8,7 @@ export interface StrategicState { >lastStrategyApplied : Symbol(StrategicState.lastStrategyApplied, Decl(generatorTypeCheck62.ts, 0, 33)) } -export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>): (a: T) => IterableIterator<T | undefined> { +export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>): (a: T) => IterableIterator<T | undefined, void> { >strategy : Symbol(strategy, Decl(generatorTypeCheck62.ts, 2, 1)) >T : Symbol(T, Decl(generatorTypeCheck62.ts, 4, 25)) >StrategicState : Symbol(StrategicState, Decl(generatorTypeCheck62.ts, 0, 0)) @@ -18,7 +18,7 @@ export function strategy<T extends StrategicState>(stratName: string, gen: (a: T >T : Symbol(T, Decl(generatorTypeCheck62.ts, 4, 25)) >IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) >T : Symbol(T, Decl(generatorTypeCheck62.ts, 4, 25)) ->a : Symbol(a, Decl(generatorTypeCheck62.ts, 4, 120)) +>a : Symbol(a, Decl(generatorTypeCheck62.ts, 4, 126)) >T : Symbol(T, Decl(generatorTypeCheck62.ts, 4, 25)) >IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) >T : Symbol(T, Decl(generatorTypeCheck62.ts, 4, 25)) @@ -50,7 +50,7 @@ export interface Strategy<T> { >Strategy : Symbol(Strategy, Decl(generatorTypeCheck62.ts, 13, 1)) >T : Symbol(T, Decl(generatorTypeCheck62.ts, 15, 26)) - (a: T): IterableIterator<T | undefined>; + (a: T): IterableIterator<T | undefined, void>; >a : Symbol(a, Decl(generatorTypeCheck62.ts, 16, 5)) >T : Symbol(T, Decl(generatorTypeCheck62.ts, 15, 26)) >IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) @@ -73,7 +73,7 @@ export const Nothing1: Strategy<State> = strategy("Nothing", function*(state: St >state : Symbol(state, Decl(generatorTypeCheck62.ts, 23, 71)) >State : Symbol(State, Decl(generatorTypeCheck62.ts, 17, 1)) - return state; + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. >state : Symbol(state, Decl(generatorTypeCheck62.ts, 23, 71)) }); @@ -100,7 +100,7 @@ export const Nothing3: Strategy<State> = strategy("Nothing", function* (state: S >State : Symbol(State, Decl(generatorTypeCheck62.ts, 17, 1)) yield ; - return state; + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. >state : Symbol(state, Decl(generatorTypeCheck62.ts, 31, 72)) }); diff --git a/tests/baselines/reference/generatorTypeCheck62.types b/tests/baselines/reference/generatorTypeCheck62.types index 6cf1b381d66f9..6196ace757ddb 100644 --- a/tests/baselines/reference/generatorTypeCheck62.types +++ b/tests/baselines/reference/generatorTypeCheck62.types @@ -7,31 +7,31 @@ export interface StrategicState { > : ^^^^^^ } -export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>): (a: T) => IterableIterator<T | undefined> { ->strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>) => (a: T) => IterableIterator<T | undefined> -> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ +export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>): (a: T) => IterableIterator<T | undefined, void> { +>strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>) => (a: T) => IterableIterator<T | undefined, void> +> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ >stratName : string > : ^^^^^^ ->gen : (a: T) => IterableIterator<T | undefined> -> : ^ ^^ ^^^^^ +>gen : (a: T) => IterableIterator<T | undefined, void> +> : ^ ^^ ^^^^^ >a : T > : ^ >a : T > : ^ return function*(state) { ->function*(state) { for (const next of gen(state)) { if (next) { next.lastStrategyApplied = stratName; } yield next; } } : (state: T) => Generator<T, void, undefined> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function*(state) { for (const next of gen(state)) { if (next) { next.lastStrategyApplied = stratName; } yield next; } } : (state: T) => Generator<T, void, any> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >state : T > : ^ for (const next of gen(state)) { >next : T > : ^ ->gen(state) : IterableIterator<T> -> : ^^^^^^^^^^^^^^^^^^^ ->gen : (a: T) => IterableIterator<T | undefined> -> : ^ ^^ ^^^^^ +>gen(state) : IterableIterator<T, void> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ +>gen : (a: T) => IterableIterator<T | undefined, void> +> : ^ ^^ ^^^^^ >state : T > : ^ @@ -52,8 +52,8 @@ export function strategy<T extends StrategicState>(stratName: string, gen: (a: T > : ^^^^^^ } yield next; ->yield next : undefined -> : ^^^^^^^^^ +>yield next : any +> : ^^^ >next : T > : ^ } @@ -61,7 +61,7 @@ export function strategy<T extends StrategicState>(stratName: string, gen: (a: T } export interface Strategy<T> { - (a: T): IterableIterator<T | undefined>; + (a: T): IterableIterator<T | undefined, void>; >a : T > : ^ } @@ -75,18 +75,18 @@ export interface State extends StrategicState { export const Nothing1: Strategy<State> = strategy("Nothing", function*(state: State) { >Nothing1 : Strategy<State> > : ^^^^^^^^^^^^^^^ ->strategy("Nothing", function*(state: State) { return state;}) : (a: State) => IterableIterator<State> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>) => (a: T) => IterableIterator<T | undefined> -> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ +>strategy("Nothing", function*(state: State) { return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error.}) : (a: State) => IterableIterator<State, void> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>) => (a: T) => IterableIterator<T | undefined, void> +> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ >"Nothing" : "Nothing" > : ^^^^^^^^^ ->function*(state: State) { return state;} : (state: State) => Generator<never, State, undefined> -> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function*(state: State) { return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error.} : (state: State) => Generator<never, State, any> +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >state : State > : ^^^^^ - return state; + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. >state : State > : ^^^^^ @@ -95,20 +95,20 @@ export const Nothing1: Strategy<State> = strategy("Nothing", function*(state: St export const Nothing2: Strategy<State> = strategy("Nothing", function*(state: State) { >Nothing2 : Strategy<State> > : ^^^^^^^^^^^^^^^ ->strategy("Nothing", function*(state: State) { yield state;}) : (a: State) => IterableIterator<State> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>) => (a: T) => IterableIterator<T | undefined> -> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ +>strategy("Nothing", function*(state: State) { yield state;}) : (a: State) => IterableIterator<State, void> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>) => (a: T) => IterableIterator<T | undefined, void> +> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ >"Nothing" : "Nothing" > : ^^^^^^^^^ ->function*(state: State) { yield state;} : (state: State) => Generator<State, void, undefined> -> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function*(state: State) { yield state;} : (state: State) => Generator<State, void, any> +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >state : State > : ^^^^^ yield state; ->yield state : undefined -> : ^^^^^^^^^ +>yield state : any +> : ^^^ >state : State > : ^^^^^ @@ -117,22 +117,22 @@ export const Nothing2: Strategy<State> = strategy("Nothing", function*(state: St export const Nothing3: Strategy<State> = strategy("Nothing", function* (state: State) { >Nothing3 : Strategy<State> > : ^^^^^^^^^^^^^^^ ->strategy("Nothing", function* (state: State) { yield ; return state;}) : (a: any) => IterableIterator<any> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>) => (a: T) => IterableIterator<T | undefined> -> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ +>strategy("Nothing", function* (state: State) { yield ; return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error.}) : (a: State) => IterableIterator<State, void> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>) => (a: T) => IterableIterator<T | undefined, void> +> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ >"Nothing" : "Nothing" > : ^^^^^^^^^ ->function* (state: State) { yield ; return state;} : (state: State) => Generator<any, State, undefined> -> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function* (state: State) { yield ; return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error.} : (state: State) => Generator<any, State, any> +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >state : State > : ^^^^^ yield ; ->yield : undefined -> : ^^^^^^^^^ +>yield : any +> : ^^^ - return state; + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. >state : State > : ^^^^^ diff --git a/tests/baselines/reference/generatorTypeCheck63.errors.txt b/tests/baselines/reference/generatorTypeCheck63.errors.txt index e2045c7207c45..b13d18ebeed21 100644 --- a/tests/baselines/reference/generatorTypeCheck63.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck63.errors.txt @@ -1,18 +1,32 @@ -generatorTypeCheck63.ts(24,61): error TS2345: Argument of type '(state: State) => Generator<number, State, undefined>' is not assignable to parameter of type '(a: State) => IterableIterator<State>'. - Call signature return types 'Generator<number, State, undefined>' and 'IterableIterator<State>' are incompatible. +generatorTypeCheck63.ts(24,61): error TS2345: Argument of type '(state: State) => Generator<number, State, any>' is not assignable to parameter of type '(a: State) => IterableIterator<State, void>'. + Call signature return types 'Generator<number, State, any>' and 'IterableIterator<State, void>' are incompatible. The types returned by 'next(...)' are incompatible between these types. - Type 'IteratorResult<number, State>' is not assignable to type 'IteratorResult<State, any>'. - Type 'IteratorYieldResult<number>' is not assignable to type 'IteratorResult<State, any>'. + Type 'IteratorResult<number, State>' is not assignable to type 'IteratorResult<State, void>'. + Type 'IteratorYieldResult<number>' is not assignable to type 'IteratorResult<State, void>'. Type 'IteratorYieldResult<number>' is not assignable to type 'IteratorYieldResult<State>'. Type 'number' is not assignable to type 'State'. +generatorTypeCheck63.ts(32,62): error TS2345: Argument of type '(state: State) => Generator<never, number, any>' is not assignable to parameter of type '(a: State) => IterableIterator<State, void>'. + Call signature return types 'Generator<never, number, any>' and 'IterableIterator<State, void>' are incompatible. + The types returned by 'next(...)' are incompatible between these types. + Type 'IteratorResult<never, number>' is not assignable to type 'IteratorResult<State, void>'. + Type 'IteratorReturnResult<number>' is not assignable to type 'IteratorResult<State, void>'. + Type 'IteratorReturnResult<number>' is not assignable to type 'IteratorReturnResult<void>'. + Type 'number' is not assignable to type 'void'. +generatorTypeCheck63.ts(36,62): error TS2345: Argument of type '(state: State) => Generator<State, number, any>' is not assignable to parameter of type '(a: State) => IterableIterator<State, void>'. + Call signature return types 'Generator<State, number, any>' and 'IterableIterator<State, void>' are incompatible. + The types returned by 'next(...)' are incompatible between these types. + Type 'IteratorResult<State, number>' is not assignable to type 'IteratorResult<State, void>'. + Type 'IteratorReturnResult<number>' is not assignable to type 'IteratorResult<State, void>'. + Type 'IteratorReturnResult<number>' is not assignable to type 'IteratorReturnResult<void>'. + Type 'number' is not assignable to type 'void'. -==== generatorTypeCheck63.ts (1 errors) ==== +==== generatorTypeCheck63.ts (3 errors) ==== export interface StrategicState { lastStrategyApplied?: string; } - export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>): (a: T) => IterableIterator<T | undefined> { + export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>): (a: T) => IterableIterator<T | undefined, void> { return function*(state) { for (const next of gen(state)) { if (next) { @@ -24,7 +38,7 @@ generatorTypeCheck63.ts(24,61): error TS2345: Argument of type '(state: State) = } export interface Strategy<T> { - (a: T): IterableIterator<T | undefined>; + (a: T): IterableIterator<T | undefined, void>; } export interface State extends StrategicState { @@ -33,25 +47,41 @@ generatorTypeCheck63.ts(24,61): error TS2345: Argument of type '(state: State) = export const Nothing: Strategy<State> = strategy("Nothing", function* (state: State) { ~~~~~~~~ -!!! error TS2345: Argument of type '(state: State) => Generator<number, State, undefined>' is not assignable to parameter of type '(a: State) => IterableIterator<State>'. -!!! error TS2345: Call signature return types 'Generator<number, State, undefined>' and 'IterableIterator<State>' are incompatible. +!!! error TS2345: Argument of type '(state: State) => Generator<number, State, any>' is not assignable to parameter of type '(a: State) => IterableIterator<State, void>'. +!!! error TS2345: Call signature return types 'Generator<number, State, any>' and 'IterableIterator<State, void>' are incompatible. !!! error TS2345: The types returned by 'next(...)' are incompatible between these types. -!!! error TS2345: Type 'IteratorResult<number, State>' is not assignable to type 'IteratorResult<State, any>'. -!!! error TS2345: Type 'IteratorYieldResult<number>' is not assignable to type 'IteratorResult<State, any>'. +!!! error TS2345: Type 'IteratorResult<number, State>' is not assignable to type 'IteratorResult<State, void>'. +!!! error TS2345: Type 'IteratorYieldResult<number>' is not assignable to type 'IteratorResult<State, void>'. !!! error TS2345: Type 'IteratorYieldResult<number>' is not assignable to type 'IteratorYieldResult<State>'. !!! error TS2345: Type 'number' is not assignable to type 'State'. - yield 1; - return state; + yield 1; // number isn't a `State`, so this should error. + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); export const Nothing1: Strategy<State> = strategy("Nothing", function* (state: State) { }); export const Nothing2: Strategy<State> = strategy("Nothing", function* (state: State) { - return 1; + ~~~~~~~~ +!!! error TS2345: Argument of type '(state: State) => Generator<never, number, any>' is not assignable to parameter of type '(a: State) => IterableIterator<State, void>'. +!!! error TS2345: Call signature return types 'Generator<never, number, any>' and 'IterableIterator<State, void>' are incompatible. +!!! error TS2345: The types returned by 'next(...)' are incompatible between these types. +!!! error TS2345: Type 'IteratorResult<never, number>' is not assignable to type 'IteratorResult<State, void>'. +!!! error TS2345: Type 'IteratorReturnResult<number>' is not assignable to type 'IteratorResult<State, void>'. +!!! error TS2345: Type 'IteratorReturnResult<number>' is not assignable to type 'IteratorReturnResult<void>'. +!!! error TS2345: Type 'number' is not assignable to type 'void'. + return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); export const Nothing3: Strategy<State> = strategy("Nothing", function* (state: State) { + ~~~~~~~~ +!!! error TS2345: Argument of type '(state: State) => Generator<State, number, any>' is not assignable to parameter of type '(a: State) => IterableIterator<State, void>'. +!!! error TS2345: Call signature return types 'Generator<State, number, any>' and 'IterableIterator<State, void>' are incompatible. +!!! error TS2345: The types returned by 'next(...)' are incompatible between these types. +!!! error TS2345: Type 'IteratorResult<State, number>' is not assignable to type 'IteratorResult<State, void>'. +!!! error TS2345: Type 'IteratorReturnResult<number>' is not assignable to type 'IteratorResult<State, void>'. +!!! error TS2345: Type 'IteratorReturnResult<number>' is not assignable to type 'IteratorReturnResult<void>'. +!!! error TS2345: Type 'number' is not assignable to type 'void'. yield state; - return 1; + return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck63.js b/tests/baselines/reference/generatorTypeCheck63.js index f1f4d3ee52e81..0aaf78ccacfac 100644 --- a/tests/baselines/reference/generatorTypeCheck63.js +++ b/tests/baselines/reference/generatorTypeCheck63.js @@ -5,7 +5,7 @@ export interface StrategicState { lastStrategyApplied?: string; } -export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>): (a: T) => IterableIterator<T | undefined> { +export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>): (a: T) => IterableIterator<T | undefined, void> { return function*(state) { for (const next of gen(state)) { if (next) { @@ -17,7 +17,7 @@ export function strategy<T extends StrategicState>(stratName: string, gen: (a: T } export interface Strategy<T> { - (a: T): IterableIterator<T | undefined>; + (a: T): IterableIterator<T | undefined, void>; } export interface State extends StrategicState { @@ -25,20 +25,20 @@ export interface State extends StrategicState { } export const Nothing: Strategy<State> = strategy("Nothing", function* (state: State) { - yield 1; - return state; + yield 1; // number isn't a `State`, so this should error. + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); export const Nothing1: Strategy<State> = strategy("Nothing", function* (state: State) { }); export const Nothing2: Strategy<State> = strategy("Nothing", function* (state: State) { - return 1; + return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); export const Nothing3: Strategy<State> = strategy("Nothing", function* (state: State) { yield state; - return 1; + return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); //// [generatorTypeCheck63.js] @@ -57,15 +57,15 @@ function strategy(stratName, gen) { }; } exports.Nothing = strategy("Nothing", function* (state) { - yield 1; - return state; + yield 1; // number isn't a `State`, so this should error. + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); exports.Nothing1 = strategy("Nothing", function* (state) { }); exports.Nothing2 = strategy("Nothing", function* (state) { - return 1; + return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); exports.Nothing3 = strategy("Nothing", function* (state) { yield state; - return 1; + return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); diff --git a/tests/baselines/reference/generatorTypeCheck63.symbols b/tests/baselines/reference/generatorTypeCheck63.symbols index e395f8e0a4437..d23cf0b032707 100644 --- a/tests/baselines/reference/generatorTypeCheck63.symbols +++ b/tests/baselines/reference/generatorTypeCheck63.symbols @@ -8,7 +8,7 @@ export interface StrategicState { >lastStrategyApplied : Symbol(StrategicState.lastStrategyApplied, Decl(generatorTypeCheck63.ts, 0, 33)) } -export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>): (a: T) => IterableIterator<T | undefined> { +export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>): (a: T) => IterableIterator<T | undefined, void> { >strategy : Symbol(strategy, Decl(generatorTypeCheck63.ts, 2, 1)) >T : Symbol(T, Decl(generatorTypeCheck63.ts, 4, 25)) >StrategicState : Symbol(StrategicState, Decl(generatorTypeCheck63.ts, 0, 0)) @@ -18,7 +18,7 @@ export function strategy<T extends StrategicState>(stratName: string, gen: (a: T >T : Symbol(T, Decl(generatorTypeCheck63.ts, 4, 25)) >IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) >T : Symbol(T, Decl(generatorTypeCheck63.ts, 4, 25)) ->a : Symbol(a, Decl(generatorTypeCheck63.ts, 4, 120)) +>a : Symbol(a, Decl(generatorTypeCheck63.ts, 4, 126)) >T : Symbol(T, Decl(generatorTypeCheck63.ts, 4, 25)) >IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) >T : Symbol(T, Decl(generatorTypeCheck63.ts, 4, 25)) @@ -50,7 +50,7 @@ export interface Strategy<T> { >Strategy : Symbol(Strategy, Decl(generatorTypeCheck63.ts, 13, 1)) >T : Symbol(T, Decl(generatorTypeCheck63.ts, 15, 26)) - (a: T): IterableIterator<T | undefined>; + (a: T): IterableIterator<T | undefined, void>; >a : Symbol(a, Decl(generatorTypeCheck63.ts, 16, 5)) >T : Symbol(T, Decl(generatorTypeCheck63.ts, 15, 26)) >IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) @@ -73,8 +73,8 @@ export const Nothing: Strategy<State> = strategy("Nothing", function* (state: St >state : Symbol(state, Decl(generatorTypeCheck63.ts, 23, 71)) >State : Symbol(State, Decl(generatorTypeCheck63.ts, 17, 1)) - yield 1; - return state; + yield 1; // number isn't a `State`, so this should error. + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. >state : Symbol(state, Decl(generatorTypeCheck63.ts, 23, 71)) }); @@ -97,7 +97,7 @@ export const Nothing2: Strategy<State> = strategy("Nothing", function* (state: S >state : Symbol(state, Decl(generatorTypeCheck63.ts, 31, 72)) >State : Symbol(State, Decl(generatorTypeCheck63.ts, 17, 1)) - return 1; + return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); export const Nothing3: Strategy<State> = strategy("Nothing", function* (state: State) { @@ -111,5 +111,5 @@ export const Nothing3: Strategy<State> = strategy("Nothing", function* (state: S yield state; >state : Symbol(state, Decl(generatorTypeCheck63.ts, 35, 72)) - return 1; + return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); diff --git a/tests/baselines/reference/generatorTypeCheck63.types b/tests/baselines/reference/generatorTypeCheck63.types index 9efb4d642b8d7..0a3419f300b27 100644 --- a/tests/baselines/reference/generatorTypeCheck63.types +++ b/tests/baselines/reference/generatorTypeCheck63.types @@ -7,31 +7,31 @@ export interface StrategicState { > : ^^^^^^ } -export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>): (a: T) => IterableIterator<T | undefined> { ->strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>) => (a: T) => IterableIterator<T | undefined> -> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ +export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>): (a: T) => IterableIterator<T | undefined, void> { +>strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>) => (a: T) => IterableIterator<T | undefined, void> +> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ >stratName : string > : ^^^^^^ ->gen : (a: T) => IterableIterator<T | undefined> -> : ^ ^^ ^^^^^ +>gen : (a: T) => IterableIterator<T | undefined, void> +> : ^ ^^ ^^^^^ >a : T > : ^ >a : T > : ^ return function*(state) { ->function*(state) { for (const next of gen(state)) { if (next) { next.lastStrategyApplied = stratName; } yield next; } } : (state: T) => Generator<T, void, undefined> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function*(state) { for (const next of gen(state)) { if (next) { next.lastStrategyApplied = stratName; } yield next; } } : (state: T) => Generator<T, void, any> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >state : T > : ^ for (const next of gen(state)) { >next : T > : ^ ->gen(state) : IterableIterator<T> -> : ^^^^^^^^^^^^^^^^^^^ ->gen : (a: T) => IterableIterator<T | undefined> -> : ^ ^^ ^^^^^ +>gen(state) : IterableIterator<T, void> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ +>gen : (a: T) => IterableIterator<T | undefined, void> +> : ^ ^^ ^^^^^ >state : T > : ^ @@ -52,8 +52,8 @@ export function strategy<T extends StrategicState>(stratName: string, gen: (a: T > : ^^^^^^ } yield next; ->yield next : undefined -> : ^^^^^^^^^ +>yield next : any +> : ^^^ >next : T > : ^ } @@ -61,7 +61,7 @@ export function strategy<T extends StrategicState>(stratName: string, gen: (a: T } export interface Strategy<T> { - (a: T): IterableIterator<T | undefined>; + (a: T): IterableIterator<T | undefined, void>; >a : T > : ^ } @@ -75,24 +75,24 @@ export interface State extends StrategicState { export const Nothing: Strategy<State> = strategy("Nothing", function* (state: State) { >Nothing : Strategy<State> > : ^^^^^^^^^^^^^^^ ->strategy("Nothing", function* (state: State) { yield 1; return state;}) : (a: State) => IterableIterator<State> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>) => (a: T) => IterableIterator<T | undefined> -> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ +>strategy("Nothing", function* (state: State) { yield 1; // number isn't a `State`, so this should error. return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error.}) : (a: State) => IterableIterator<State, void> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>) => (a: T) => IterableIterator<T | undefined, void> +> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ >"Nothing" : "Nothing" > : ^^^^^^^^^ ->function* (state: State) { yield 1; return state;} : (state: State) => Generator<number, State, undefined> -> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function* (state: State) { yield 1; // number isn't a `State`, so this should error. return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error.} : (state: State) => Generator<number, State, any> +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >state : State > : ^^^^^ - yield 1; ->yield 1 : undefined -> : ^^^^^^^^^ + yield 1; // number isn't a `State`, so this should error. +>yield 1 : any +> : ^^^ >1 : 1 > : ^ - return state; + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. >state : State > : ^^^^^ @@ -101,14 +101,14 @@ export const Nothing: Strategy<State> = strategy("Nothing", function* (state: St export const Nothing1: Strategy<State> = strategy("Nothing", function* (state: State) { >Nothing1 : Strategy<State> > : ^^^^^^^^^^^^^^^ ->strategy("Nothing", function* (state: State) {}) : (a: State) => IterableIterator<State> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>) => (a: T) => IterableIterator<T | undefined> -> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ +>strategy("Nothing", function* (state: State) {}) : (a: State) => IterableIterator<State, void> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>) => (a: T) => IterableIterator<T | undefined, void> +> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ >"Nothing" : "Nothing" > : ^^^^^^^^^ ->function* (state: State) {} : (state: State) => Generator<never, void, undefined> -> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function* (state: State) {} : (state: State) => Generator<never, void, any> +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >state : State > : ^^^^^ @@ -117,18 +117,18 @@ export const Nothing1: Strategy<State> = strategy("Nothing", function* (state: S export const Nothing2: Strategy<State> = strategy("Nothing", function* (state: State) { >Nothing2 : Strategy<State> > : ^^^^^^^^^^^^^^^ ->strategy("Nothing", function* (state: State) { return 1;}) : (a: State) => IterableIterator<State> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>) => (a: T) => IterableIterator<T | undefined> -> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ +>strategy("Nothing", function* (state: State) { return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error.}) : (a: State) => IterableIterator<State, void> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>) => (a: T) => IterableIterator<T | undefined, void> +> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ >"Nothing" : "Nothing" > : ^^^^^^^^^ ->function* (state: State) { return 1;} : (state: State) => Generator<never, number, undefined> -> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function* (state: State) { return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error.} : (state: State) => Generator<never, number, any> +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >state : State > : ^^^^^ - return 1; + return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error. >1 : 1 > : ^ @@ -137,24 +137,24 @@ export const Nothing2: Strategy<State> = strategy("Nothing", function* (state: S export const Nothing3: Strategy<State> = strategy("Nothing", function* (state: State) { >Nothing3 : Strategy<State> > : ^^^^^^^^^^^^^^^ ->strategy("Nothing", function* (state: State) { yield state; return 1;}) : (a: State) => IterableIterator<State> -> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>) => (a: T) => IterableIterator<T | undefined> -> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ +>strategy("Nothing", function* (state: State) { yield state; return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error.}) : (a: State) => IterableIterator<State, void> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>strategy : <T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>) => (a: T) => IterableIterator<T | undefined, void> +> : ^ ^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^^^ >"Nothing" : "Nothing" > : ^^^^^^^^^ ->function* (state: State) { yield state; return 1;} : (state: State) => Generator<State, number, undefined> -> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>function* (state: State) { yield state; return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error.} : (state: State) => Generator<State, number, any> +> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >state : State > : ^^^^^ yield state; ->yield state : undefined -> : ^^^^^^^^^ +>yield state : any +> : ^^^ >state : State > : ^^^^^ - return 1; + return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error. >1 : 1 > : ^ diff --git a/tests/baselines/reference/generatorTypeCheck7.errors.txt b/tests/baselines/reference/generatorTypeCheck7.errors.txt index db8a668fd9f07..fc3e9880926c0 100644 --- a/tests/baselines/reference/generatorTypeCheck7.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck7.errors.txt @@ -1,4 +1,4 @@ -generatorTypeCheck7.ts(4,17): error TS2741: Property 'hello' is missing in type 'Generator<number, any, undefined>' but required in type 'WeirdIter'. +generatorTypeCheck7.ts(4,17): error TS2741: Property 'hello' is missing in type 'Generator<number, any, any>' but required in type 'WeirdIter'. ==== generatorTypeCheck7.ts (1 errors) ==== @@ -7,5 +7,5 @@ generatorTypeCheck7.ts(4,17): error TS2741: Property 'hello' is missing in type } function* g1(): WeirdIter { } ~~~~~~~~~ -!!! error TS2741: Property 'hello' is missing in type 'Generator<number, any, undefined>' but required in type 'WeirdIter'. +!!! error TS2741: Property 'hello' is missing in type 'Generator<number, any, any>' but required in type 'WeirdIter'. !!! related TS2728 generatorTypeCheck7.ts:2:5: 'hello' is declared here. \ No newline at end of file diff --git a/tests/baselines/reference/generatorTypeCheck8.errors.txt b/tests/baselines/reference/generatorTypeCheck8.errors.txt index b7cd014a3eeaa..532e0a4c4541d 100644 --- a/tests/baselines/reference/generatorTypeCheck8.errors.txt +++ b/tests/baselines/reference/generatorTypeCheck8.errors.txt @@ -1,4 +1,4 @@ -generatorTypeCheck8.ts(2,17): error TS2322: Type 'Generator<string, any, undefined>' is not assignable to type 'BadGenerator'. +generatorTypeCheck8.ts(2,17): error TS2322: Type 'Generator<string, any, any>' is not assignable to type 'BadGenerator'. The types returned by 'next(...)' are incompatible between these types. Type 'IteratorResult<string, any>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorResult<number, any>'. @@ -10,7 +10,7 @@ generatorTypeCheck8.ts(2,17): error TS2322: Type 'Generator<string, any, undefin interface BadGenerator extends Iterator<number>, Iterable<string> { } function* g3(): BadGenerator { } ~~~~~~~~~~~~ -!!! error TS2322: Type 'Generator<string, any, undefined>' is not assignable to type 'BadGenerator'. +!!! error TS2322: Type 'Generator<string, any, any>' is not assignable to type 'BadGenerator'. !!! error TS2322: The types returned by 'next(...)' are incompatible between these types. !!! error TS2322: Type 'IteratorResult<string, any>' is not assignable to type 'IteratorResult<number, any>'. !!! error TS2322: Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorResult<number, any>'. diff --git a/tests/baselines/reference/importHelpersNoHelpersForAsyncGenerators.types b/tests/baselines/reference/importHelpersNoHelpersForAsyncGenerators.types index de022f3da9373..3bf6420170b9d 100644 --- a/tests/baselines/reference/importHelpersNoHelpersForAsyncGenerators.types +++ b/tests/baselines/reference/importHelpersNoHelpersForAsyncGenerators.types @@ -2,8 +2,8 @@ === main.ts === export async function * f() { ->f : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ await 1; >await 1 : 1 diff --git a/tests/baselines/reference/isolatedDeclarationsStrictBuiltinIteratorReturn(isolateddeclarations=false,strictbuiltiniteratorreturn=false).js b/tests/baselines/reference/isolatedDeclarationsStrictBuiltinIteratorReturn(isolateddeclarations=false,strictbuiltiniteratorreturn=false).js new file mode 100644 index 0000000000000..a3915d2aa8930 --- /dev/null +++ b/tests/baselines/reference/isolatedDeclarationsStrictBuiltinIteratorReturn(isolateddeclarations=false,strictbuiltiniteratorreturn=false).js @@ -0,0 +1,111 @@ +//// [tests/cases/compiler/isolatedDeclarationsStrictBuiltinIteratorReturn.ts] //// + +//// [isolatedDeclarationsStrictBuiltinIteratorReturn.ts] +declare let x1: Iterable<number>; +declare let x2: Iterable<number, any>; +declare let x3: Iterable<number, any, any>; +declare let x4: Iterable<number, undefined>; +declare let x5: Iterable<number, undefined, any>; +declare let x6: Iterable<number, BuiltinIteratorReturn>; +declare let x7: Iterable<number, BuiltinIteratorReturn, any>; + +declare let x8: IterableIterator<number>; +declare let x9: IterableIterator<number, any>; +declare let x10: IterableIterator<number, any, any>; +declare let x11: IterableIterator<number, undefined>; +declare let x12: IterableIterator<number, undefined, any>; +declare let x13: IterableIterator<number, BuiltinIteratorReturn>; +declare let x14: IterableIterator<number, BuiltinIteratorReturn, any>; + +declare function f1(): Iterable<number>; +declare function f2(): Iterable<number, any>; +declare function f3(): Iterable<number, any, any>; +declare function f4(): Iterable<number, undefined>; +declare function f5(): Iterable<number, undefined, any>; +declare function f6(): Iterable<number, BuiltinIteratorReturn>; +declare function f7(): Iterable<number, BuiltinIteratorReturn, any>; + +declare function f8(): IterableIterator<number>; +declare function f9(): IterableIterator<number, any>; +declare function f10(): IterableIterator<number, any, any>; +declare function f11(): IterableIterator<number, undefined>; +declare function f12(): IterableIterator<number, undefined, any>; +declare function f13(): IterableIterator<number, BuiltinIteratorReturn>; +declare function f14(): IterableIterator<number, BuiltinIteratorReturn, any>; + +const a1 = (): Iterable<number> => null!; +const a2 = (): Iterable<number, any> => null!; +const a3 = (): Iterable<number, any, any> => null!; +const a4 = (): Iterable<number, undefined> => null!; +const a5 = (): Iterable<number, undefined, any> => null!; +const a6 = (): Iterable<number, BuiltinIteratorReturn> => null!; +const a7 = (): Iterable<number, BuiltinIteratorReturn, any> => null!; + +const a8 = (): IterableIterator<number> => null!; +const a9 = (): IterableIterator<number, any> => null!; +const a10 = (): IterableIterator<number, any, any> => null!; +const a11 = (): IterableIterator<number, undefined> => null!; +const a12 = (): IterableIterator<number, undefined, any> => null!; +const a13 = (): IterableIterator<number, BuiltinIteratorReturn> => null!; +const a14 = (): IterableIterator<number, BuiltinIteratorReturn, any> => null!; + +//// [isolatedDeclarationsStrictBuiltinIteratorReturn.js] +const a1 = () => null; +const a2 = () => null; +const a3 = () => null; +const a4 = () => null; +const a5 = () => null; +const a6 = () => null; +const a7 = () => null; +const a8 = () => null; +const a9 = () => null; +const a10 = () => null; +const a11 = () => null; +const a12 = () => null; +const a13 = () => null; +const a14 = () => null; + + +//// [isolatedDeclarationsStrictBuiltinIteratorReturn.d.ts] +declare let x1: Iterable<number>; +declare let x2: Iterable<number, any>; +declare let x3: Iterable<number, any, any>; +declare let x4: Iterable<number, undefined>; +declare let x5: Iterable<number, undefined, any>; +declare let x6: Iterable<number, BuiltinIteratorReturn>; +declare let x7: Iterable<number, BuiltinIteratorReturn, any>; +declare let x8: IterableIterator<number>; +declare let x9: IterableIterator<number, any>; +declare let x10: IterableIterator<number, any, any>; +declare let x11: IterableIterator<number, undefined>; +declare let x12: IterableIterator<number, undefined, any>; +declare let x13: IterableIterator<number, BuiltinIteratorReturn>; +declare let x14: IterableIterator<number, BuiltinIteratorReturn, any>; +declare function f1(): Iterable<number>; +declare function f2(): Iterable<number, any>; +declare function f3(): Iterable<number, any, any>; +declare function f4(): Iterable<number, undefined>; +declare function f5(): Iterable<number, undefined, any>; +declare function f6(): Iterable<number, BuiltinIteratorReturn>; +declare function f7(): Iterable<number, BuiltinIteratorReturn, any>; +declare function f8(): IterableIterator<number>; +declare function f9(): IterableIterator<number, any>; +declare function f10(): IterableIterator<number, any, any>; +declare function f11(): IterableIterator<number, undefined>; +declare function f12(): IterableIterator<number, undefined, any>; +declare function f13(): IterableIterator<number, BuiltinIteratorReturn>; +declare function f14(): IterableIterator<number, BuiltinIteratorReturn, any>; +declare const a1: () => Iterable<number>; +declare const a2: () => Iterable<number, any>; +declare const a3: () => Iterable<number, any, any>; +declare const a4: () => Iterable<number, undefined>; +declare const a5: () => Iterable<number, undefined, any>; +declare const a6: () => Iterable<number, BuiltinIteratorReturn>; +declare const a7: () => Iterable<number, BuiltinIteratorReturn, any>; +declare const a8: () => IterableIterator<number>; +declare const a9: () => IterableIterator<number, any>; +declare const a10: () => IterableIterator<number, any, any>; +declare const a11: () => IterableIterator<number, undefined>; +declare const a12: () => IterableIterator<number, undefined, any>; +declare const a13: () => IterableIterator<number, BuiltinIteratorReturn>; +declare const a14: () => IterableIterator<number, BuiltinIteratorReturn, any>; diff --git a/tests/baselines/reference/isolatedDeclarationsStrictBuiltinIteratorReturn(isolateddeclarations=false,strictbuiltiniteratorreturn=true).js b/tests/baselines/reference/isolatedDeclarationsStrictBuiltinIteratorReturn(isolateddeclarations=false,strictbuiltiniteratorreturn=true).js new file mode 100644 index 0000000000000..a3915d2aa8930 --- /dev/null +++ b/tests/baselines/reference/isolatedDeclarationsStrictBuiltinIteratorReturn(isolateddeclarations=false,strictbuiltiniteratorreturn=true).js @@ -0,0 +1,111 @@ +//// [tests/cases/compiler/isolatedDeclarationsStrictBuiltinIteratorReturn.ts] //// + +//// [isolatedDeclarationsStrictBuiltinIteratorReturn.ts] +declare let x1: Iterable<number>; +declare let x2: Iterable<number, any>; +declare let x3: Iterable<number, any, any>; +declare let x4: Iterable<number, undefined>; +declare let x5: Iterable<number, undefined, any>; +declare let x6: Iterable<number, BuiltinIteratorReturn>; +declare let x7: Iterable<number, BuiltinIteratorReturn, any>; + +declare let x8: IterableIterator<number>; +declare let x9: IterableIterator<number, any>; +declare let x10: IterableIterator<number, any, any>; +declare let x11: IterableIterator<number, undefined>; +declare let x12: IterableIterator<number, undefined, any>; +declare let x13: IterableIterator<number, BuiltinIteratorReturn>; +declare let x14: IterableIterator<number, BuiltinIteratorReturn, any>; + +declare function f1(): Iterable<number>; +declare function f2(): Iterable<number, any>; +declare function f3(): Iterable<number, any, any>; +declare function f4(): Iterable<number, undefined>; +declare function f5(): Iterable<number, undefined, any>; +declare function f6(): Iterable<number, BuiltinIteratorReturn>; +declare function f7(): Iterable<number, BuiltinIteratorReturn, any>; + +declare function f8(): IterableIterator<number>; +declare function f9(): IterableIterator<number, any>; +declare function f10(): IterableIterator<number, any, any>; +declare function f11(): IterableIterator<number, undefined>; +declare function f12(): IterableIterator<number, undefined, any>; +declare function f13(): IterableIterator<number, BuiltinIteratorReturn>; +declare function f14(): IterableIterator<number, BuiltinIteratorReturn, any>; + +const a1 = (): Iterable<number> => null!; +const a2 = (): Iterable<number, any> => null!; +const a3 = (): Iterable<number, any, any> => null!; +const a4 = (): Iterable<number, undefined> => null!; +const a5 = (): Iterable<number, undefined, any> => null!; +const a6 = (): Iterable<number, BuiltinIteratorReturn> => null!; +const a7 = (): Iterable<number, BuiltinIteratorReturn, any> => null!; + +const a8 = (): IterableIterator<number> => null!; +const a9 = (): IterableIterator<number, any> => null!; +const a10 = (): IterableIterator<number, any, any> => null!; +const a11 = (): IterableIterator<number, undefined> => null!; +const a12 = (): IterableIterator<number, undefined, any> => null!; +const a13 = (): IterableIterator<number, BuiltinIteratorReturn> => null!; +const a14 = (): IterableIterator<number, BuiltinIteratorReturn, any> => null!; + +//// [isolatedDeclarationsStrictBuiltinIteratorReturn.js] +const a1 = () => null; +const a2 = () => null; +const a3 = () => null; +const a4 = () => null; +const a5 = () => null; +const a6 = () => null; +const a7 = () => null; +const a8 = () => null; +const a9 = () => null; +const a10 = () => null; +const a11 = () => null; +const a12 = () => null; +const a13 = () => null; +const a14 = () => null; + + +//// [isolatedDeclarationsStrictBuiltinIteratorReturn.d.ts] +declare let x1: Iterable<number>; +declare let x2: Iterable<number, any>; +declare let x3: Iterable<number, any, any>; +declare let x4: Iterable<number, undefined>; +declare let x5: Iterable<number, undefined, any>; +declare let x6: Iterable<number, BuiltinIteratorReturn>; +declare let x7: Iterable<number, BuiltinIteratorReturn, any>; +declare let x8: IterableIterator<number>; +declare let x9: IterableIterator<number, any>; +declare let x10: IterableIterator<number, any, any>; +declare let x11: IterableIterator<number, undefined>; +declare let x12: IterableIterator<number, undefined, any>; +declare let x13: IterableIterator<number, BuiltinIteratorReturn>; +declare let x14: IterableIterator<number, BuiltinIteratorReturn, any>; +declare function f1(): Iterable<number>; +declare function f2(): Iterable<number, any>; +declare function f3(): Iterable<number, any, any>; +declare function f4(): Iterable<number, undefined>; +declare function f5(): Iterable<number, undefined, any>; +declare function f6(): Iterable<number, BuiltinIteratorReturn>; +declare function f7(): Iterable<number, BuiltinIteratorReturn, any>; +declare function f8(): IterableIterator<number>; +declare function f9(): IterableIterator<number, any>; +declare function f10(): IterableIterator<number, any, any>; +declare function f11(): IterableIterator<number, undefined>; +declare function f12(): IterableIterator<number, undefined, any>; +declare function f13(): IterableIterator<number, BuiltinIteratorReturn>; +declare function f14(): IterableIterator<number, BuiltinIteratorReturn, any>; +declare const a1: () => Iterable<number>; +declare const a2: () => Iterable<number, any>; +declare const a3: () => Iterable<number, any, any>; +declare const a4: () => Iterable<number, undefined>; +declare const a5: () => Iterable<number, undefined, any>; +declare const a6: () => Iterable<number, BuiltinIteratorReturn>; +declare const a7: () => Iterable<number, BuiltinIteratorReturn, any>; +declare const a8: () => IterableIterator<number>; +declare const a9: () => IterableIterator<number, any>; +declare const a10: () => IterableIterator<number, any, any>; +declare const a11: () => IterableIterator<number, undefined>; +declare const a12: () => IterableIterator<number, undefined, any>; +declare const a13: () => IterableIterator<number, BuiltinIteratorReturn>; +declare const a14: () => IterableIterator<number, BuiltinIteratorReturn, any>; diff --git a/tests/baselines/reference/isolatedDeclarationsStrictBuiltinIteratorReturn(isolateddeclarations=true,strictbuiltiniteratorreturn=false).js b/tests/baselines/reference/isolatedDeclarationsStrictBuiltinIteratorReturn(isolateddeclarations=true,strictbuiltiniteratorreturn=false).js new file mode 100644 index 0000000000000..a3915d2aa8930 --- /dev/null +++ b/tests/baselines/reference/isolatedDeclarationsStrictBuiltinIteratorReturn(isolateddeclarations=true,strictbuiltiniteratorreturn=false).js @@ -0,0 +1,111 @@ +//// [tests/cases/compiler/isolatedDeclarationsStrictBuiltinIteratorReturn.ts] //// + +//// [isolatedDeclarationsStrictBuiltinIteratorReturn.ts] +declare let x1: Iterable<number>; +declare let x2: Iterable<number, any>; +declare let x3: Iterable<number, any, any>; +declare let x4: Iterable<number, undefined>; +declare let x5: Iterable<number, undefined, any>; +declare let x6: Iterable<number, BuiltinIteratorReturn>; +declare let x7: Iterable<number, BuiltinIteratorReturn, any>; + +declare let x8: IterableIterator<number>; +declare let x9: IterableIterator<number, any>; +declare let x10: IterableIterator<number, any, any>; +declare let x11: IterableIterator<number, undefined>; +declare let x12: IterableIterator<number, undefined, any>; +declare let x13: IterableIterator<number, BuiltinIteratorReturn>; +declare let x14: IterableIterator<number, BuiltinIteratorReturn, any>; + +declare function f1(): Iterable<number>; +declare function f2(): Iterable<number, any>; +declare function f3(): Iterable<number, any, any>; +declare function f4(): Iterable<number, undefined>; +declare function f5(): Iterable<number, undefined, any>; +declare function f6(): Iterable<number, BuiltinIteratorReturn>; +declare function f7(): Iterable<number, BuiltinIteratorReturn, any>; + +declare function f8(): IterableIterator<number>; +declare function f9(): IterableIterator<number, any>; +declare function f10(): IterableIterator<number, any, any>; +declare function f11(): IterableIterator<number, undefined>; +declare function f12(): IterableIterator<number, undefined, any>; +declare function f13(): IterableIterator<number, BuiltinIteratorReturn>; +declare function f14(): IterableIterator<number, BuiltinIteratorReturn, any>; + +const a1 = (): Iterable<number> => null!; +const a2 = (): Iterable<number, any> => null!; +const a3 = (): Iterable<number, any, any> => null!; +const a4 = (): Iterable<number, undefined> => null!; +const a5 = (): Iterable<number, undefined, any> => null!; +const a6 = (): Iterable<number, BuiltinIteratorReturn> => null!; +const a7 = (): Iterable<number, BuiltinIteratorReturn, any> => null!; + +const a8 = (): IterableIterator<number> => null!; +const a9 = (): IterableIterator<number, any> => null!; +const a10 = (): IterableIterator<number, any, any> => null!; +const a11 = (): IterableIterator<number, undefined> => null!; +const a12 = (): IterableIterator<number, undefined, any> => null!; +const a13 = (): IterableIterator<number, BuiltinIteratorReturn> => null!; +const a14 = (): IterableIterator<number, BuiltinIteratorReturn, any> => null!; + +//// [isolatedDeclarationsStrictBuiltinIteratorReturn.js] +const a1 = () => null; +const a2 = () => null; +const a3 = () => null; +const a4 = () => null; +const a5 = () => null; +const a6 = () => null; +const a7 = () => null; +const a8 = () => null; +const a9 = () => null; +const a10 = () => null; +const a11 = () => null; +const a12 = () => null; +const a13 = () => null; +const a14 = () => null; + + +//// [isolatedDeclarationsStrictBuiltinIteratorReturn.d.ts] +declare let x1: Iterable<number>; +declare let x2: Iterable<number, any>; +declare let x3: Iterable<number, any, any>; +declare let x4: Iterable<number, undefined>; +declare let x5: Iterable<number, undefined, any>; +declare let x6: Iterable<number, BuiltinIteratorReturn>; +declare let x7: Iterable<number, BuiltinIteratorReturn, any>; +declare let x8: IterableIterator<number>; +declare let x9: IterableIterator<number, any>; +declare let x10: IterableIterator<number, any, any>; +declare let x11: IterableIterator<number, undefined>; +declare let x12: IterableIterator<number, undefined, any>; +declare let x13: IterableIterator<number, BuiltinIteratorReturn>; +declare let x14: IterableIterator<number, BuiltinIteratorReturn, any>; +declare function f1(): Iterable<number>; +declare function f2(): Iterable<number, any>; +declare function f3(): Iterable<number, any, any>; +declare function f4(): Iterable<number, undefined>; +declare function f5(): Iterable<number, undefined, any>; +declare function f6(): Iterable<number, BuiltinIteratorReturn>; +declare function f7(): Iterable<number, BuiltinIteratorReturn, any>; +declare function f8(): IterableIterator<number>; +declare function f9(): IterableIterator<number, any>; +declare function f10(): IterableIterator<number, any, any>; +declare function f11(): IterableIterator<number, undefined>; +declare function f12(): IterableIterator<number, undefined, any>; +declare function f13(): IterableIterator<number, BuiltinIteratorReturn>; +declare function f14(): IterableIterator<number, BuiltinIteratorReturn, any>; +declare const a1: () => Iterable<number>; +declare const a2: () => Iterable<number, any>; +declare const a3: () => Iterable<number, any, any>; +declare const a4: () => Iterable<number, undefined>; +declare const a5: () => Iterable<number, undefined, any>; +declare const a6: () => Iterable<number, BuiltinIteratorReturn>; +declare const a7: () => Iterable<number, BuiltinIteratorReturn, any>; +declare const a8: () => IterableIterator<number>; +declare const a9: () => IterableIterator<number, any>; +declare const a10: () => IterableIterator<number, any, any>; +declare const a11: () => IterableIterator<number, undefined>; +declare const a12: () => IterableIterator<number, undefined, any>; +declare const a13: () => IterableIterator<number, BuiltinIteratorReturn>; +declare const a14: () => IterableIterator<number, BuiltinIteratorReturn, any>; diff --git a/tests/baselines/reference/isolatedDeclarationsStrictBuiltinIteratorReturn(isolateddeclarations=true,strictbuiltiniteratorreturn=true).js b/tests/baselines/reference/isolatedDeclarationsStrictBuiltinIteratorReturn(isolateddeclarations=true,strictbuiltiniteratorreturn=true).js new file mode 100644 index 0000000000000..a3915d2aa8930 --- /dev/null +++ b/tests/baselines/reference/isolatedDeclarationsStrictBuiltinIteratorReturn(isolateddeclarations=true,strictbuiltiniteratorreturn=true).js @@ -0,0 +1,111 @@ +//// [tests/cases/compiler/isolatedDeclarationsStrictBuiltinIteratorReturn.ts] //// + +//// [isolatedDeclarationsStrictBuiltinIteratorReturn.ts] +declare let x1: Iterable<number>; +declare let x2: Iterable<number, any>; +declare let x3: Iterable<number, any, any>; +declare let x4: Iterable<number, undefined>; +declare let x5: Iterable<number, undefined, any>; +declare let x6: Iterable<number, BuiltinIteratorReturn>; +declare let x7: Iterable<number, BuiltinIteratorReturn, any>; + +declare let x8: IterableIterator<number>; +declare let x9: IterableIterator<number, any>; +declare let x10: IterableIterator<number, any, any>; +declare let x11: IterableIterator<number, undefined>; +declare let x12: IterableIterator<number, undefined, any>; +declare let x13: IterableIterator<number, BuiltinIteratorReturn>; +declare let x14: IterableIterator<number, BuiltinIteratorReturn, any>; + +declare function f1(): Iterable<number>; +declare function f2(): Iterable<number, any>; +declare function f3(): Iterable<number, any, any>; +declare function f4(): Iterable<number, undefined>; +declare function f5(): Iterable<number, undefined, any>; +declare function f6(): Iterable<number, BuiltinIteratorReturn>; +declare function f7(): Iterable<number, BuiltinIteratorReturn, any>; + +declare function f8(): IterableIterator<number>; +declare function f9(): IterableIterator<number, any>; +declare function f10(): IterableIterator<number, any, any>; +declare function f11(): IterableIterator<number, undefined>; +declare function f12(): IterableIterator<number, undefined, any>; +declare function f13(): IterableIterator<number, BuiltinIteratorReturn>; +declare function f14(): IterableIterator<number, BuiltinIteratorReturn, any>; + +const a1 = (): Iterable<number> => null!; +const a2 = (): Iterable<number, any> => null!; +const a3 = (): Iterable<number, any, any> => null!; +const a4 = (): Iterable<number, undefined> => null!; +const a5 = (): Iterable<number, undefined, any> => null!; +const a6 = (): Iterable<number, BuiltinIteratorReturn> => null!; +const a7 = (): Iterable<number, BuiltinIteratorReturn, any> => null!; + +const a8 = (): IterableIterator<number> => null!; +const a9 = (): IterableIterator<number, any> => null!; +const a10 = (): IterableIterator<number, any, any> => null!; +const a11 = (): IterableIterator<number, undefined> => null!; +const a12 = (): IterableIterator<number, undefined, any> => null!; +const a13 = (): IterableIterator<number, BuiltinIteratorReturn> => null!; +const a14 = (): IterableIterator<number, BuiltinIteratorReturn, any> => null!; + +//// [isolatedDeclarationsStrictBuiltinIteratorReturn.js] +const a1 = () => null; +const a2 = () => null; +const a3 = () => null; +const a4 = () => null; +const a5 = () => null; +const a6 = () => null; +const a7 = () => null; +const a8 = () => null; +const a9 = () => null; +const a10 = () => null; +const a11 = () => null; +const a12 = () => null; +const a13 = () => null; +const a14 = () => null; + + +//// [isolatedDeclarationsStrictBuiltinIteratorReturn.d.ts] +declare let x1: Iterable<number>; +declare let x2: Iterable<number, any>; +declare let x3: Iterable<number, any, any>; +declare let x4: Iterable<number, undefined>; +declare let x5: Iterable<number, undefined, any>; +declare let x6: Iterable<number, BuiltinIteratorReturn>; +declare let x7: Iterable<number, BuiltinIteratorReturn, any>; +declare let x8: IterableIterator<number>; +declare let x9: IterableIterator<number, any>; +declare let x10: IterableIterator<number, any, any>; +declare let x11: IterableIterator<number, undefined>; +declare let x12: IterableIterator<number, undefined, any>; +declare let x13: IterableIterator<number, BuiltinIteratorReturn>; +declare let x14: IterableIterator<number, BuiltinIteratorReturn, any>; +declare function f1(): Iterable<number>; +declare function f2(): Iterable<number, any>; +declare function f3(): Iterable<number, any, any>; +declare function f4(): Iterable<number, undefined>; +declare function f5(): Iterable<number, undefined, any>; +declare function f6(): Iterable<number, BuiltinIteratorReturn>; +declare function f7(): Iterable<number, BuiltinIteratorReturn, any>; +declare function f8(): IterableIterator<number>; +declare function f9(): IterableIterator<number, any>; +declare function f10(): IterableIterator<number, any, any>; +declare function f11(): IterableIterator<number, undefined>; +declare function f12(): IterableIterator<number, undefined, any>; +declare function f13(): IterableIterator<number, BuiltinIteratorReturn>; +declare function f14(): IterableIterator<number, BuiltinIteratorReturn, any>; +declare const a1: () => Iterable<number>; +declare const a2: () => Iterable<number, any>; +declare const a3: () => Iterable<number, any, any>; +declare const a4: () => Iterable<number, undefined>; +declare const a5: () => Iterable<number, undefined, any>; +declare const a6: () => Iterable<number, BuiltinIteratorReturn>; +declare const a7: () => Iterable<number, BuiltinIteratorReturn, any>; +declare const a8: () => IterableIterator<number>; +declare const a9: () => IterableIterator<number, any>; +declare const a10: () => IterableIterator<number, any, any>; +declare const a11: () => IterableIterator<number, undefined>; +declare const a12: () => IterableIterator<number, undefined, any>; +declare const a13: () => IterableIterator<number, BuiltinIteratorReturn>; +declare const a14: () => IterableIterator<number, BuiltinIteratorReturn, any>; diff --git a/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=false).js b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=false).js new file mode 100644 index 0000000000000..0c0f14988e428 --- /dev/null +++ b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=false).js @@ -0,0 +1,80 @@ +//// [tests/cases/compiler/iterableTReturnTNext.ts] //// + +//// [iterableTReturnTNext.ts] +declare const map: Map<string, number>; +declare const set: Set<number>; + +// based on: +// - https://github.com/apollographql/apollo-client/blob/8740f198805a99e01136617c4055d611b92cc231/src/react/hooks/__tests__/useMutation.test.tsx#L2328 +// - https://github.com/continuedev/continue/blob/046bca088a833f8b3620412ff64e4b6f41fbb959/extensions/vscode/src/autocomplete/lsp.ts#L60 +const r1: number = map.values().next().value; // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` + +// based on: https://github.com/gcanti/fp-ts/blob/89a772e95e414acee679f42f56527606f7b61f30/src/Map.ts#L246 +interface Next<A> { + readonly done?: boolean + readonly value: A +} +const r2: Next<number> = map.values().next(); // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` + +// based on: https://github.com/graphql/graphql-js/blob/e15c3ec4dc21d9fd1df34fe9798cadf3bf02c6ea/src/execution/__tests__/mapAsyncIterable-test.ts#L175 +async function* source() { yield 1; yield 2; yield 3; } +const doubles = source(); +doubles.return(); + +// based on: https://github.com/backstage/backstage/blob/85d9346ef11c1c20e4405102b4f5d93afb1292c1/packages/core-app-api/src/routing/RouteTracker.tsx#L62 +const r3: number | undefined = set.values().next().value; + +// based on: https://github.com/microsoft/TypeScript/blob/15f67e0b482faf9f6a3ab9965f3c11196bf3e99b/src/harness/compilerImpl.ts#L77 +class MyMap implements Map<string, number> { + declare private _keys: string[]; + declare private _values: number[]; + declare size: number; + declare [Symbol.toStringTag]: string; + + clear(): void { } + delete(key: string): boolean { return false; } + forEach(callbackfn: (value: number, key: string, map: Map<string, number>) => void, thisArg?: any): void { } + get(key: string): number | undefined { return undefined; } + has(key: string): boolean { return false; } + set(key: string, value: number): this { return this; } + entries(): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } + keys(): IterableIterator<string, BuiltinIteratorReturn> { throw new Error("Method not implemented."); } + + [Symbol.iterator](): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } + + // error when strictBuiltinIteratorReturn is true because values() has implicit `void` return, which isn't assignable to `undefined` + * values() { + yield* this._values; + } +} + + +//// [iterableTReturnTNext.js] +"use strict"; +// based on: +// - https://github.com/apollographql/apollo-client/blob/8740f198805a99e01136617c4055d611b92cc231/src/react/hooks/__tests__/useMutation.test.tsx#L2328 +// - https://github.com/continuedev/continue/blob/046bca088a833f8b3620412ff64e4b6f41fbb959/extensions/vscode/src/autocomplete/lsp.ts#L60 +const r1 = map.values().next().value; // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` +const r2 = map.values().next(); // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` +// based on: https://github.com/graphql/graphql-js/blob/e15c3ec4dc21d9fd1df34fe9798cadf3bf02c6ea/src/execution/__tests__/mapAsyncIterable-test.ts#L175 +async function* source() { yield 1; yield 2; yield 3; } +const doubles = source(); +doubles.return(); +// based on: https://github.com/backstage/backstage/blob/85d9346ef11c1c20e4405102b4f5d93afb1292c1/packages/core-app-api/src/routing/RouteTracker.tsx#L62 +const r3 = set.values().next().value; +// based on: https://github.com/microsoft/TypeScript/blob/15f67e0b482faf9f6a3ab9965f3c11196bf3e99b/src/harness/compilerImpl.ts#L77 +class MyMap { + clear() { } + delete(key) { return false; } + forEach(callbackfn, thisArg) { } + get(key) { return undefined; } + has(key) { return false; } + set(key, value) { return this; } + entries() { throw new Error("Method not implemented."); } + keys() { throw new Error("Method not implemented."); } + [Symbol.iterator]() { throw new Error("Method not implemented."); } + // error when strictBuiltinIteratorReturn is true because values() has implicit `void` return, which isn't assignable to `undefined` + *values() { + yield* this._values; + } +} diff --git a/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=false).symbols b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=false).symbols new file mode 100644 index 0000000000000..b72ed04227de4 --- /dev/null +++ b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=false).symbols @@ -0,0 +1,152 @@ +//// [tests/cases/compiler/iterableTReturnTNext.ts] //// + +=== iterableTReturnTNext.ts === +declare const map: Map<string, number>; +>map : Symbol(map, Decl(iterableTReturnTNext.ts, 0, 13)) +>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) + +declare const set: Set<number>; +>set : Symbol(set, Decl(iterableTReturnTNext.ts, 1, 13)) +>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --)) + +// based on: +// - https://github.com/apollographql/apollo-client/blob/8740f198805a99e01136617c4055d611b92cc231/src/react/hooks/__tests__/useMutation.test.tsx#L2328 +// - https://github.com/continuedev/continue/blob/046bca088a833f8b3620412ff64e4b6f41fbb959/extensions/vscode/src/autocomplete/lsp.ts#L60 +const r1: number = map.values().next().value; // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` +>r1 : Symbol(r1, Decl(iterableTReturnTNext.ts, 6, 5)) +>map.values().next().value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>map.values().next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) +>map.values : Symbol(Map.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>map : Symbol(map, Decl(iterableTReturnTNext.ts, 0, 13)) +>values : Symbol(Map.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) +>value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) + +// based on: https://github.com/gcanti/fp-ts/blob/89a772e95e414acee679f42f56527606f7b61f30/src/Map.ts#L246 +interface Next<A> { +>Next : Symbol(Next, Decl(iterableTReturnTNext.ts, 6, 45)) +>A : Symbol(A, Decl(iterableTReturnTNext.ts, 9, 15)) + + readonly done?: boolean +>done : Symbol(Next.done, Decl(iterableTReturnTNext.ts, 9, 19)) + + readonly value: A +>value : Symbol(Next.value, Decl(iterableTReturnTNext.ts, 10, 27)) +>A : Symbol(A, Decl(iterableTReturnTNext.ts, 9, 15)) +} +const r2: Next<number> = map.values().next(); // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` +>r2 : Symbol(r2, Decl(iterableTReturnTNext.ts, 13, 5)) +>Next : Symbol(Next, Decl(iterableTReturnTNext.ts, 6, 45)) +>map.values().next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) +>map.values : Symbol(Map.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>map : Symbol(map, Decl(iterableTReturnTNext.ts, 0, 13)) +>values : Symbol(Map.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) + +// based on: https://github.com/graphql/graphql-js/blob/e15c3ec4dc21d9fd1df34fe9798cadf3bf02c6ea/src/execution/__tests__/mapAsyncIterable-test.ts#L175 +async function* source() { yield 1; yield 2; yield 3; } +>source : Symbol(source, Decl(iterableTReturnTNext.ts, 13, 45)) + +const doubles = source(); +>doubles : Symbol(doubles, Decl(iterableTReturnTNext.ts, 17, 5)) +>source : Symbol(source, Decl(iterableTReturnTNext.ts, 13, 45)) + +doubles.return(); +>doubles.return : Symbol(AsyncGenerator.return, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) +>doubles : Symbol(doubles, Decl(iterableTReturnTNext.ts, 17, 5)) +>return : Symbol(AsyncGenerator.return, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) + +// based on: https://github.com/backstage/backstage/blob/85d9346ef11c1c20e4405102b4f5d93afb1292c1/packages/core-app-api/src/routing/RouteTracker.tsx#L62 +const r3: number | undefined = set.values().next().value; +>r3 : Symbol(r3, Decl(iterableTReturnTNext.ts, 21, 5)) +>set.values().next().value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>set.values().next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) +>set.values : Symbol(Set.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>set : Symbol(set, Decl(iterableTReturnTNext.ts, 1, 13)) +>values : Symbol(Set.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) +>value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) + +// based on: https://github.com/microsoft/TypeScript/blob/15f67e0b482faf9f6a3ab9965f3c11196bf3e99b/src/harness/compilerImpl.ts#L77 +class MyMap implements Map<string, number> { +>MyMap : Symbol(MyMap, Decl(iterableTReturnTNext.ts, 21, 57)) +>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) + + declare private _keys: string[]; +>_keys : Symbol(MyMap._keys, Decl(iterableTReturnTNext.ts, 24, 44)) + + declare private _values: number[]; +>_values : Symbol(MyMap._values, Decl(iterableTReturnTNext.ts, 25, 36)) + + declare size: number; +>size : Symbol(MyMap.size, Decl(iterableTReturnTNext.ts, 26, 38)) + + declare [Symbol.toStringTag]: string; +>[Symbol.toStringTag] : Symbol(MyMap[Symbol.toStringTag], Decl(iterableTReturnTNext.ts, 27, 25)) +>Symbol.toStringTag : Symbol(SymbolConstructor.toStringTag, Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) +>toStringTag : Symbol(SymbolConstructor.toStringTag, Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) + + clear(): void { } +>clear : Symbol(MyMap.clear, Decl(iterableTReturnTNext.ts, 28, 41)) + + delete(key: string): boolean { return false; } +>delete : Symbol(MyMap.delete, Decl(iterableTReturnTNext.ts, 30, 21)) +>key : Symbol(key, Decl(iterableTReturnTNext.ts, 31, 11)) + + forEach(callbackfn: (value: number, key: string, map: Map<string, number>) => void, thisArg?: any): void { } +>forEach : Symbol(MyMap.forEach, Decl(iterableTReturnTNext.ts, 31, 50)) +>callbackfn : Symbol(callbackfn, Decl(iterableTReturnTNext.ts, 32, 12)) +>value : Symbol(value, Decl(iterableTReturnTNext.ts, 32, 25)) +>key : Symbol(key, Decl(iterableTReturnTNext.ts, 32, 39)) +>map : Symbol(map, Decl(iterableTReturnTNext.ts, 32, 52)) +>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>thisArg : Symbol(thisArg, Decl(iterableTReturnTNext.ts, 32, 87)) + + get(key: string): number | undefined { return undefined; } +>get : Symbol(MyMap.get, Decl(iterableTReturnTNext.ts, 32, 112)) +>key : Symbol(key, Decl(iterableTReturnTNext.ts, 33, 8)) +>undefined : Symbol(undefined) + + has(key: string): boolean { return false; } +>has : Symbol(MyMap.has, Decl(iterableTReturnTNext.ts, 33, 62)) +>key : Symbol(key, Decl(iterableTReturnTNext.ts, 34, 8)) + + set(key: string, value: number): this { return this; } +>set : Symbol(MyMap.set, Decl(iterableTReturnTNext.ts, 34, 47)) +>key : Symbol(key, Decl(iterableTReturnTNext.ts, 35, 8)) +>value : Symbol(value, Decl(iterableTReturnTNext.ts, 35, 20)) +>this : Symbol(MyMap, Decl(iterableTReturnTNext.ts, 21, 57)) + + entries(): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } +>entries : Symbol(MyMap.entries, Decl(iterableTReturnTNext.ts, 35, 58)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>BuiltinIteratorReturn : Symbol(BuiltinIteratorReturn, Decl(lib.es2015.iterable.d.ts, --, --)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2022.error.d.ts, --, --)) + + keys(): IterableIterator<string, BuiltinIteratorReturn> { throw new Error("Method not implemented."); } +>keys : Symbol(MyMap.keys, Decl(iterableTReturnTNext.ts, 36, 120)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>BuiltinIteratorReturn : Symbol(BuiltinIteratorReturn, Decl(lib.es2015.iterable.d.ts, --, --)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2022.error.d.ts, --, --)) + + [Symbol.iterator](): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } +>[Symbol.iterator] : Symbol(MyMap[Symbol.iterator], Decl(iterableTReturnTNext.ts, 37, 107)) +>Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) +>iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>BuiltinIteratorReturn : Symbol(BuiltinIteratorReturn, Decl(lib.es2015.iterable.d.ts, --, --)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2022.error.d.ts, --, --)) + + // error when strictBuiltinIteratorReturn is true because values() has implicit `void` return, which isn't assignable to `undefined` + * values() { +>values : Symbol(MyMap.values, Decl(iterableTReturnTNext.ts, 39, 130)) + + yield* this._values; +>this._values : Symbol(MyMap._values, Decl(iterableTReturnTNext.ts, 25, 36)) +>this : Symbol(MyMap, Decl(iterableTReturnTNext.ts, 21, 57)) +>_values : Symbol(MyMap._values, Decl(iterableTReturnTNext.ts, 25, 36)) + } +} + diff --git a/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=false).types b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=false).types new file mode 100644 index 0000000000000..11831b7d4eb31 --- /dev/null +++ b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=false).types @@ -0,0 +1,247 @@ +//// [tests/cases/compiler/iterableTReturnTNext.ts] //// + +=== iterableTReturnTNext.ts === +declare const map: Map<string, number>; +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ + +declare const set: Set<number>; +>set : Set<number> +> : ^^^^^^^^^^^ + +// based on: +// - https://github.com/apollographql/apollo-client/blob/8740f198805a99e01136617c4055d611b92cc231/src/react/hooks/__tests__/useMutation.test.tsx#L2328 +// - https://github.com/continuedev/continue/blob/046bca088a833f8b3620412ff64e4b6f41fbb959/extensions/vscode/src/autocomplete/lsp.ts#L60 +const r1: number = map.values().next().value; // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` +>r1 : number +> : ^^^^^^ +>map.values().next().value : any +>map.values().next() : IteratorResult<number, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values().next : (...args: [] | [any]) => IteratorResult<number, any> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values() : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>values : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>next : (...args: [] | [any]) => IteratorResult<number, any> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>value : any +> : ^^^ + +// based on: https://github.com/gcanti/fp-ts/blob/89a772e95e414acee679f42f56527606f7b61f30/src/Map.ts#L246 +interface Next<A> { + readonly done?: boolean +>done : boolean | undefined +> : ^^^^^^^^^^^^^^^^^^^ + + readonly value: A +>value : A +> : ^ +} +const r2: Next<number> = map.values().next(); // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` +>r2 : Next<number> +> : ^^^^^^^^^^^^ +>map.values().next() : IteratorResult<number, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values().next : (...args: [] | [any]) => IteratorResult<number, any> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values() : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>values : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>next : (...args: [] | [any]) => IteratorResult<number, any> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +// based on: https://github.com/graphql/graphql-js/blob/e15c3ec4dc21d9fd1df34fe9798cadf3bf02c6ea/src/execution/__tests__/mapAsyncIterable-test.ts#L175 +async function* source() { yield 1; yield 2; yield 3; } +>source : () => AsyncGenerator<1 | 2 | 3, void, unknown> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield 1 : any +>1 : 1 +> : ^ +>yield 2 : any +>2 : 2 +> : ^ +>yield 3 : any +>3 : 3 +> : ^ + +const doubles = source(); +>doubles : AsyncGenerator<1 | 2 | 3, void, unknown> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>source() : AsyncGenerator<1 | 2 | 3, void, unknown> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>source : () => AsyncGenerator<1 | 2 | 3, void, unknown> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +doubles.return(); +>doubles.return() : Promise<IteratorResult<1 | 2 | 3, void>> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>doubles.return : (value: void | PromiseLike<void>) => Promise<IteratorResult<1 | 2 | 3, void>> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>doubles : AsyncGenerator<1 | 2 | 3, void, unknown> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>return : (value: void | PromiseLike<void>) => Promise<IteratorResult<1 | 2 | 3, void>> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +// based on: https://github.com/backstage/backstage/blob/85d9346ef11c1c20e4405102b4f5d93afb1292c1/packages/core-app-api/src/routing/RouteTracker.tsx#L62 +const r3: number | undefined = set.values().next().value; +>r3 : number | undefined +> : ^^^^^^^^^^^^^^^^^^ +>set.values().next().value : any +>set.values().next() : IteratorResult<number, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set.values().next : (...args: [] | [any]) => IteratorResult<number, any> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set.values() : IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^ +>set.values : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set : Set<number> +> : ^^^^^^^^^^^ +>values : () => IterableIterator<number> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>next : (...args: [] | [any]) => IteratorResult<number, any> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>value : any +> : ^^^ + +// based on: https://github.com/microsoft/TypeScript/blob/15f67e0b482faf9f6a3ab9965f3c11196bf3e99b/src/harness/compilerImpl.ts#L77 +class MyMap implements Map<string, number> { +>MyMap : MyMap +> : ^^^^^ + + declare private _keys: string[]; +>_keys : string[] +> : ^^^^^^^^ + + declare private _values: number[]; +>_values : number[] +> : ^^^^^^^^ + + declare size: number; +>size : number +> : ^^^^^^ + + declare [Symbol.toStringTag]: string; +>[Symbol.toStringTag] : string +> : ^^^^^^ +>Symbol.toStringTag : unique symbol +> : ^^^^^^^^^^^^^ +>Symbol : SymbolConstructor +> : ^^^^^^^^^^^^^^^^^ +>toStringTag : unique symbol +> : ^^^^^^^^^^^^^ + + clear(): void { } +>clear : () => void +> : ^^^^^^ + + delete(key: string): boolean { return false; } +>delete : (key: string) => boolean +> : ^ ^^ ^^^^^ +>key : string +> : ^^^^^^ +>false : false +> : ^^^^^ + + forEach(callbackfn: (value: number, key: string, map: Map<string, number>) => void, thisArg?: any): void { } +>forEach : (callbackfn: (value: number, key: string, map: Map<string, number>) => void, thisArg?: any) => void +> : ^ ^^ ^^ ^^^ ^^^^^ +>callbackfn : (value: number, key: string, map: Map<string, number>) => void +> : ^ ^^ ^^ ^^ ^^ ^^ ^^^^^ +>value : number +> : ^^^^^^ +>key : string +> : ^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>thisArg : any + + get(key: string): number | undefined { return undefined; } +>get : (key: string) => number | undefined +> : ^ ^^ ^^^^^ +>key : string +> : ^^^^^^ +>undefined : undefined +> : ^^^^^^^^^ + + has(key: string): boolean { return false; } +>has : (key: string) => boolean +> : ^ ^^ ^^^^^ +>key : string +> : ^^^^^^ +>false : false +> : ^^^^^ + + set(key: string, value: number): this { return this; } +>set : (key: string, value: number) => this +> : ^ ^^ ^^ ^^ ^^^^^ +>key : string +> : ^^^^^^ +>value : number +> : ^^^^^^ +>this : this +> : ^^^^ + + entries(): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } +>entries : () => IterableIterator<[string, number], BuiltinIteratorReturn> +> : ^^^^^^ +>new Error("Method not implemented.") : Error +> : ^^^^^ +>Error : ErrorConstructor +> : ^^^^^^^^^^^^^^^^ +>"Method not implemented." : "Method not implemented." +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ + + keys(): IterableIterator<string, BuiltinIteratorReturn> { throw new Error("Method not implemented."); } +>keys : () => IterableIterator<string, BuiltinIteratorReturn> +> : ^^^^^^ +>new Error("Method not implemented.") : Error +> : ^^^^^ +>Error : ErrorConstructor +> : ^^^^^^^^^^^^^^^^ +>"Method not implemented." : "Method not implemented." +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ + + [Symbol.iterator](): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } +>[Symbol.iterator] : () => IterableIterator<[string, number], BuiltinIteratorReturn> +> : ^^^^^^ +>Symbol.iterator : unique symbol +> : ^^^^^^^^^^^^^ +>Symbol : SymbolConstructor +> : ^^^^^^^^^^^^^^^^^ +>iterator : unique symbol +> : ^^^^^^^^^^^^^ +>new Error("Method not implemented.") : Error +> : ^^^^^ +>Error : ErrorConstructor +> : ^^^^^^^^^^^^^^^^ +>"Method not implemented." : "Method not implemented." +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ + + // error when strictBuiltinIteratorReturn is true because values() has implicit `void` return, which isn't assignable to `undefined` + * values() { +>values : () => Generator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + yield* this._values; +>yield* this._values : any +>this._values : number[] +> : ^^^^^^^^ +>this : this +> : ^^^^ +>_values : number[] +> : ^^^^^^^^ + } +} + diff --git a/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=true).errors.txt b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=true).errors.txt new file mode 100644 index 0000000000000..f5134dd19f0f3 --- /dev/null +++ b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=true).errors.txt @@ -0,0 +1,81 @@ +iterableTReturnTNext.ts(7,7): error TS2322: Type 'number | undefined' is not assignable to type 'number'. + Type 'undefined' is not assignable to type 'number'. +iterableTReturnTNext.ts(14,7): error TS2322: Type 'IteratorResult<number, undefined>' is not assignable to type 'Next<number>'. + Type 'IteratorReturnResult<undefined>' is not assignable to type 'Next<number>'. + Types of property 'value' are incompatible. + Type 'undefined' is not assignable to type 'number'. +iterableTReturnTNext.ts(43,7): error TS2416: Property 'values' in type 'MyMap' is not assignable to the same property in base type 'Map<string, number>'. + Type '() => Generator<number, void, any>' is not assignable to type '() => IterableIterator<number, undefined>'. + Call signature return types 'Generator<number, void, any>' and 'IterableIterator<number, undefined>' are incompatible. + The types returned by 'next(...)' are incompatible between these types. + Type 'IteratorResult<number, void>' is not assignable to type 'IteratorResult<number, undefined>'. + Type 'IteratorReturnResult<void>' is not assignable to type 'IteratorResult<number, undefined>'. + Type 'IteratorReturnResult<void>' is not assignable to type 'IteratorReturnResult<undefined>'. + Type 'void' is not assignable to type 'undefined'. + + +==== iterableTReturnTNext.ts (3 errors) ==== + declare const map: Map<string, number>; + declare const set: Set<number>; + + // based on: + // - https://github.com/apollographql/apollo-client/blob/8740f198805a99e01136617c4055d611b92cc231/src/react/hooks/__tests__/useMutation.test.tsx#L2328 + // - https://github.com/continuedev/continue/blob/046bca088a833f8b3620412ff64e4b6f41fbb959/extensions/vscode/src/autocomplete/lsp.ts#L60 + const r1: number = map.values().next().value; // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` + ~~ +!!! error TS2322: Type 'number | undefined' is not assignable to type 'number'. +!!! error TS2322: Type 'undefined' is not assignable to type 'number'. + + // based on: https://github.com/gcanti/fp-ts/blob/89a772e95e414acee679f42f56527606f7b61f30/src/Map.ts#L246 + interface Next<A> { + readonly done?: boolean + readonly value: A + } + const r2: Next<number> = map.values().next(); // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` + ~~ +!!! error TS2322: Type 'IteratorResult<number, undefined>' is not assignable to type 'Next<number>'. +!!! error TS2322: Type 'IteratorReturnResult<undefined>' is not assignable to type 'Next<number>'. +!!! error TS2322: Types of property 'value' are incompatible. +!!! error TS2322: Type 'undefined' is not assignable to type 'number'. + + // based on: https://github.com/graphql/graphql-js/blob/e15c3ec4dc21d9fd1df34fe9798cadf3bf02c6ea/src/execution/__tests__/mapAsyncIterable-test.ts#L175 + async function* source() { yield 1; yield 2; yield 3; } + const doubles = source(); + doubles.return(); + + // based on: https://github.com/backstage/backstage/blob/85d9346ef11c1c20e4405102b4f5d93afb1292c1/packages/core-app-api/src/routing/RouteTracker.tsx#L62 + const r3: number | undefined = set.values().next().value; + + // based on: https://github.com/microsoft/TypeScript/blob/15f67e0b482faf9f6a3ab9965f3c11196bf3e99b/src/harness/compilerImpl.ts#L77 + class MyMap implements Map<string, number> { + declare private _keys: string[]; + declare private _values: number[]; + declare size: number; + declare [Symbol.toStringTag]: string; + + clear(): void { } + delete(key: string): boolean { return false; } + forEach(callbackfn: (value: number, key: string, map: Map<string, number>) => void, thisArg?: any): void { } + get(key: string): number | undefined { return undefined; } + has(key: string): boolean { return false; } + set(key: string, value: number): this { return this; } + entries(): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } + keys(): IterableIterator<string, BuiltinIteratorReturn> { throw new Error("Method not implemented."); } + + [Symbol.iterator](): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } + + // error when strictBuiltinIteratorReturn is true because values() has implicit `void` return, which isn't assignable to `undefined` + * values() { + ~~~~~~ +!!! error TS2416: Property 'values' in type 'MyMap' is not assignable to the same property in base type 'Map<string, number>'. +!!! error TS2416: Type '() => Generator<number, void, any>' is not assignable to type '() => IterableIterator<number, undefined>'. +!!! error TS2416: Call signature return types 'Generator<number, void, any>' and 'IterableIterator<number, undefined>' are incompatible. +!!! error TS2416: The types returned by 'next(...)' are incompatible between these types. +!!! error TS2416: Type 'IteratorResult<number, void>' is not assignable to type 'IteratorResult<number, undefined>'. +!!! error TS2416: Type 'IteratorReturnResult<void>' is not assignable to type 'IteratorResult<number, undefined>'. +!!! error TS2416: Type 'IteratorReturnResult<void>' is not assignable to type 'IteratorReturnResult<undefined>'. +!!! error TS2416: Type 'void' is not assignable to type 'undefined'. + yield* this._values; + } + } + \ No newline at end of file diff --git a/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=true).js b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=true).js new file mode 100644 index 0000000000000..0c0f14988e428 --- /dev/null +++ b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=true).js @@ -0,0 +1,80 @@ +//// [tests/cases/compiler/iterableTReturnTNext.ts] //// + +//// [iterableTReturnTNext.ts] +declare const map: Map<string, number>; +declare const set: Set<number>; + +// based on: +// - https://github.com/apollographql/apollo-client/blob/8740f198805a99e01136617c4055d611b92cc231/src/react/hooks/__tests__/useMutation.test.tsx#L2328 +// - https://github.com/continuedev/continue/blob/046bca088a833f8b3620412ff64e4b6f41fbb959/extensions/vscode/src/autocomplete/lsp.ts#L60 +const r1: number = map.values().next().value; // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` + +// based on: https://github.com/gcanti/fp-ts/blob/89a772e95e414acee679f42f56527606f7b61f30/src/Map.ts#L246 +interface Next<A> { + readonly done?: boolean + readonly value: A +} +const r2: Next<number> = map.values().next(); // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` + +// based on: https://github.com/graphql/graphql-js/blob/e15c3ec4dc21d9fd1df34fe9798cadf3bf02c6ea/src/execution/__tests__/mapAsyncIterable-test.ts#L175 +async function* source() { yield 1; yield 2; yield 3; } +const doubles = source(); +doubles.return(); + +// based on: https://github.com/backstage/backstage/blob/85d9346ef11c1c20e4405102b4f5d93afb1292c1/packages/core-app-api/src/routing/RouteTracker.tsx#L62 +const r3: number | undefined = set.values().next().value; + +// based on: https://github.com/microsoft/TypeScript/blob/15f67e0b482faf9f6a3ab9965f3c11196bf3e99b/src/harness/compilerImpl.ts#L77 +class MyMap implements Map<string, number> { + declare private _keys: string[]; + declare private _values: number[]; + declare size: number; + declare [Symbol.toStringTag]: string; + + clear(): void { } + delete(key: string): boolean { return false; } + forEach(callbackfn: (value: number, key: string, map: Map<string, number>) => void, thisArg?: any): void { } + get(key: string): number | undefined { return undefined; } + has(key: string): boolean { return false; } + set(key: string, value: number): this { return this; } + entries(): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } + keys(): IterableIterator<string, BuiltinIteratorReturn> { throw new Error("Method not implemented."); } + + [Symbol.iterator](): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } + + // error when strictBuiltinIteratorReturn is true because values() has implicit `void` return, which isn't assignable to `undefined` + * values() { + yield* this._values; + } +} + + +//// [iterableTReturnTNext.js] +"use strict"; +// based on: +// - https://github.com/apollographql/apollo-client/blob/8740f198805a99e01136617c4055d611b92cc231/src/react/hooks/__tests__/useMutation.test.tsx#L2328 +// - https://github.com/continuedev/continue/blob/046bca088a833f8b3620412ff64e4b6f41fbb959/extensions/vscode/src/autocomplete/lsp.ts#L60 +const r1 = map.values().next().value; // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` +const r2 = map.values().next(); // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` +// based on: https://github.com/graphql/graphql-js/blob/e15c3ec4dc21d9fd1df34fe9798cadf3bf02c6ea/src/execution/__tests__/mapAsyncIterable-test.ts#L175 +async function* source() { yield 1; yield 2; yield 3; } +const doubles = source(); +doubles.return(); +// based on: https://github.com/backstage/backstage/blob/85d9346ef11c1c20e4405102b4f5d93afb1292c1/packages/core-app-api/src/routing/RouteTracker.tsx#L62 +const r3 = set.values().next().value; +// based on: https://github.com/microsoft/TypeScript/blob/15f67e0b482faf9f6a3ab9965f3c11196bf3e99b/src/harness/compilerImpl.ts#L77 +class MyMap { + clear() { } + delete(key) { return false; } + forEach(callbackfn, thisArg) { } + get(key) { return undefined; } + has(key) { return false; } + set(key, value) { return this; } + entries() { throw new Error("Method not implemented."); } + keys() { throw new Error("Method not implemented."); } + [Symbol.iterator]() { throw new Error("Method not implemented."); } + // error when strictBuiltinIteratorReturn is true because values() has implicit `void` return, which isn't assignable to `undefined` + *values() { + yield* this._values; + } +} diff --git a/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=true).symbols b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=true).symbols new file mode 100644 index 0000000000000..b72ed04227de4 --- /dev/null +++ b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=true).symbols @@ -0,0 +1,152 @@ +//// [tests/cases/compiler/iterableTReturnTNext.ts] //// + +=== iterableTReturnTNext.ts === +declare const map: Map<string, number>; +>map : Symbol(map, Decl(iterableTReturnTNext.ts, 0, 13)) +>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) + +declare const set: Set<number>; +>set : Symbol(set, Decl(iterableTReturnTNext.ts, 1, 13)) +>Set : Symbol(Set, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.collection.d.ts, --, --)) + +// based on: +// - https://github.com/apollographql/apollo-client/blob/8740f198805a99e01136617c4055d611b92cc231/src/react/hooks/__tests__/useMutation.test.tsx#L2328 +// - https://github.com/continuedev/continue/blob/046bca088a833f8b3620412ff64e4b6f41fbb959/extensions/vscode/src/autocomplete/lsp.ts#L60 +const r1: number = map.values().next().value; // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` +>r1 : Symbol(r1, Decl(iterableTReturnTNext.ts, 6, 5)) +>map.values().next().value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>map.values().next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) +>map.values : Symbol(Map.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>map : Symbol(map, Decl(iterableTReturnTNext.ts, 0, 13)) +>values : Symbol(Map.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) +>value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) + +// based on: https://github.com/gcanti/fp-ts/blob/89a772e95e414acee679f42f56527606f7b61f30/src/Map.ts#L246 +interface Next<A> { +>Next : Symbol(Next, Decl(iterableTReturnTNext.ts, 6, 45)) +>A : Symbol(A, Decl(iterableTReturnTNext.ts, 9, 15)) + + readonly done?: boolean +>done : Symbol(Next.done, Decl(iterableTReturnTNext.ts, 9, 19)) + + readonly value: A +>value : Symbol(Next.value, Decl(iterableTReturnTNext.ts, 10, 27)) +>A : Symbol(A, Decl(iterableTReturnTNext.ts, 9, 15)) +} +const r2: Next<number> = map.values().next(); // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` +>r2 : Symbol(r2, Decl(iterableTReturnTNext.ts, 13, 5)) +>Next : Symbol(Next, Decl(iterableTReturnTNext.ts, 6, 45)) +>map.values().next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) +>map.values : Symbol(Map.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>map : Symbol(map, Decl(iterableTReturnTNext.ts, 0, 13)) +>values : Symbol(Map.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) + +// based on: https://github.com/graphql/graphql-js/blob/e15c3ec4dc21d9fd1df34fe9798cadf3bf02c6ea/src/execution/__tests__/mapAsyncIterable-test.ts#L175 +async function* source() { yield 1; yield 2; yield 3; } +>source : Symbol(source, Decl(iterableTReturnTNext.ts, 13, 45)) + +const doubles = source(); +>doubles : Symbol(doubles, Decl(iterableTReturnTNext.ts, 17, 5)) +>source : Symbol(source, Decl(iterableTReturnTNext.ts, 13, 45)) + +doubles.return(); +>doubles.return : Symbol(AsyncGenerator.return, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) +>doubles : Symbol(doubles, Decl(iterableTReturnTNext.ts, 17, 5)) +>return : Symbol(AsyncGenerator.return, Decl(lib.es2018.asyncgenerator.d.ts, --, --)) + +// based on: https://github.com/backstage/backstage/blob/85d9346ef11c1c20e4405102b4f5d93afb1292c1/packages/core-app-api/src/routing/RouteTracker.tsx#L62 +const r3: number | undefined = set.values().next().value; +>r3 : Symbol(r3, Decl(iterableTReturnTNext.ts, 21, 5)) +>set.values().next().value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) +>set.values().next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) +>set.values : Symbol(Set.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>set : Symbol(set, Decl(iterableTReturnTNext.ts, 1, 13)) +>values : Symbol(Set.values, Decl(lib.es2015.iterable.d.ts, --, --)) +>next : Symbol(Iterator.next, Decl(lib.es2015.iterable.d.ts, --, --)) +>value : Symbol(value, Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --)) + +// based on: https://github.com/microsoft/TypeScript/blob/15f67e0b482faf9f6a3ab9965f3c11196bf3e99b/src/harness/compilerImpl.ts#L77 +class MyMap implements Map<string, number> { +>MyMap : Symbol(MyMap, Decl(iterableTReturnTNext.ts, 21, 57)) +>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) + + declare private _keys: string[]; +>_keys : Symbol(MyMap._keys, Decl(iterableTReturnTNext.ts, 24, 44)) + + declare private _values: number[]; +>_values : Symbol(MyMap._values, Decl(iterableTReturnTNext.ts, 25, 36)) + + declare size: number; +>size : Symbol(MyMap.size, Decl(iterableTReturnTNext.ts, 26, 38)) + + declare [Symbol.toStringTag]: string; +>[Symbol.toStringTag] : Symbol(MyMap[Symbol.toStringTag], Decl(iterableTReturnTNext.ts, 27, 25)) +>Symbol.toStringTag : Symbol(SymbolConstructor.toStringTag, Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) +>toStringTag : Symbol(SymbolConstructor.toStringTag, Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) + + clear(): void { } +>clear : Symbol(MyMap.clear, Decl(iterableTReturnTNext.ts, 28, 41)) + + delete(key: string): boolean { return false; } +>delete : Symbol(MyMap.delete, Decl(iterableTReturnTNext.ts, 30, 21)) +>key : Symbol(key, Decl(iterableTReturnTNext.ts, 31, 11)) + + forEach(callbackfn: (value: number, key: string, map: Map<string, number>) => void, thisArg?: any): void { } +>forEach : Symbol(MyMap.forEach, Decl(iterableTReturnTNext.ts, 31, 50)) +>callbackfn : Symbol(callbackfn, Decl(iterableTReturnTNext.ts, 32, 12)) +>value : Symbol(value, Decl(iterableTReturnTNext.ts, 32, 25)) +>key : Symbol(key, Decl(iterableTReturnTNext.ts, 32, 39)) +>map : Symbol(map, Decl(iterableTReturnTNext.ts, 32, 52)) +>Map : Symbol(Map, Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.collection.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --)) +>thisArg : Symbol(thisArg, Decl(iterableTReturnTNext.ts, 32, 87)) + + get(key: string): number | undefined { return undefined; } +>get : Symbol(MyMap.get, Decl(iterableTReturnTNext.ts, 32, 112)) +>key : Symbol(key, Decl(iterableTReturnTNext.ts, 33, 8)) +>undefined : Symbol(undefined) + + has(key: string): boolean { return false; } +>has : Symbol(MyMap.has, Decl(iterableTReturnTNext.ts, 33, 62)) +>key : Symbol(key, Decl(iterableTReturnTNext.ts, 34, 8)) + + set(key: string, value: number): this { return this; } +>set : Symbol(MyMap.set, Decl(iterableTReturnTNext.ts, 34, 47)) +>key : Symbol(key, Decl(iterableTReturnTNext.ts, 35, 8)) +>value : Symbol(value, Decl(iterableTReturnTNext.ts, 35, 20)) +>this : Symbol(MyMap, Decl(iterableTReturnTNext.ts, 21, 57)) + + entries(): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } +>entries : Symbol(MyMap.entries, Decl(iterableTReturnTNext.ts, 35, 58)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>BuiltinIteratorReturn : Symbol(BuiltinIteratorReturn, Decl(lib.es2015.iterable.d.ts, --, --)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2022.error.d.ts, --, --)) + + keys(): IterableIterator<string, BuiltinIteratorReturn> { throw new Error("Method not implemented."); } +>keys : Symbol(MyMap.keys, Decl(iterableTReturnTNext.ts, 36, 120)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>BuiltinIteratorReturn : Symbol(BuiltinIteratorReturn, Decl(lib.es2015.iterable.d.ts, --, --)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2022.error.d.ts, --, --)) + + [Symbol.iterator](): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } +>[Symbol.iterator] : Symbol(MyMap[Symbol.iterator], Decl(iterableTReturnTNext.ts, 37, 107)) +>Symbol.iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2019.symbol.d.ts, --, --)) +>iterator : Symbol(SymbolConstructor.iterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>IterableIterator : Symbol(IterableIterator, Decl(lib.es2015.iterable.d.ts, --, --)) +>BuiltinIteratorReturn : Symbol(BuiltinIteratorReturn, Decl(lib.es2015.iterable.d.ts, --, --)) +>Error : Symbol(Error, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2022.error.d.ts, --, --)) + + // error when strictBuiltinIteratorReturn is true because values() has implicit `void` return, which isn't assignable to `undefined` + * values() { +>values : Symbol(MyMap.values, Decl(iterableTReturnTNext.ts, 39, 130)) + + yield* this._values; +>this._values : Symbol(MyMap._values, Decl(iterableTReturnTNext.ts, 25, 36)) +>this : Symbol(MyMap, Decl(iterableTReturnTNext.ts, 21, 57)) +>_values : Symbol(MyMap._values, Decl(iterableTReturnTNext.ts, 25, 36)) + } +} + diff --git a/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=true).types b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=true).types new file mode 100644 index 0000000000000..2f8827d04e15f --- /dev/null +++ b/tests/baselines/reference/iterableTReturnTNext(strictbuiltiniteratorreturn=true).types @@ -0,0 +1,254 @@ +//// [tests/cases/compiler/iterableTReturnTNext.ts] //// + +=== iterableTReturnTNext.ts === +declare const map: Map<string, number>; +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ + +declare const set: Set<number>; +>set : Set<number> +> : ^^^^^^^^^^^ + +// based on: +// - https://github.com/apollographql/apollo-client/blob/8740f198805a99e01136617c4055d611b92cc231/src/react/hooks/__tests__/useMutation.test.tsx#L2328 +// - https://github.com/continuedev/continue/blob/046bca088a833f8b3620412ff64e4b6f41fbb959/extensions/vscode/src/autocomplete/lsp.ts#L60 +const r1: number = map.values().next().value; // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` +>r1 : number +> : ^^^^^^ +>map.values().next().value : number | undefined +> : ^^^^^^^^^^^^^^^^^^ +>map.values().next() : IteratorResult<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values().next : (...args: [] | [any]) => IteratorResult<number, undefined> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values() : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>values : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>next : (...args: [] | [any]) => IteratorResult<number, undefined> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>value : number | undefined +> : ^^^^^^^^^^^^^^^^^^ + +// based on: https://github.com/gcanti/fp-ts/blob/89a772e95e414acee679f42f56527606f7b61f30/src/Map.ts#L246 +interface Next<A> { + readonly done?: boolean +>done : boolean | undefined +> : ^^^^^^^^^^^^^^^^^^^ + + readonly value: A +>value : A +> : ^ +} +const r2: Next<number> = map.values().next(); // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` +>r2 : Next<number> +> : ^^^^^^^^^^^^ +>map.values().next() : IteratorResult<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values().next : (...args: [] | [any]) => IteratorResult<number, undefined> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values() : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map.values : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>values : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>next : (...args: [] | [any]) => IteratorResult<number, undefined> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +// based on: https://github.com/graphql/graphql-js/blob/e15c3ec4dc21d9fd1df34fe9798cadf3bf02c6ea/src/execution/__tests__/mapAsyncIterable-test.ts#L175 +async function* source() { yield 1; yield 2; yield 3; } +>source : () => AsyncGenerator<1 | 2 | 3, void, unknown> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield 1 : any +> : ^^^ +>1 : 1 +> : ^ +>yield 2 : any +> : ^^^ +>2 : 2 +> : ^ +>yield 3 : any +> : ^^^ +>3 : 3 +> : ^ + +const doubles = source(); +>doubles : AsyncGenerator<1 | 2 | 3, void, unknown> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>source() : AsyncGenerator<1 | 2 | 3, void, unknown> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>source : () => AsyncGenerator<1 | 2 | 3, void, unknown> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +doubles.return(); +>doubles.return() : Promise<IteratorResult<1 | 2 | 3, void>> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>doubles.return : (value: void | PromiseLike<void>) => Promise<IteratorResult<1 | 2 | 3, void>> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>doubles : AsyncGenerator<1 | 2 | 3, void, unknown> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>return : (value: void | PromiseLike<void>) => Promise<IteratorResult<1 | 2 | 3, void>> +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +// based on: https://github.com/backstage/backstage/blob/85d9346ef11c1c20e4405102b4f5d93afb1292c1/packages/core-app-api/src/routing/RouteTracker.tsx#L62 +const r3: number | undefined = set.values().next().value; +>r3 : number | undefined +> : ^^^^^^^^^^^^^^^^^^ +>set.values().next().value : number | undefined +> : ^^^^^^^^^^^^^^^^^^ +>set.values().next() : IteratorResult<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set.values().next : (...args: [] | [any]) => IteratorResult<number, undefined> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set.values() : IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set.values : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>set : Set<number> +> : ^^^^^^^^^^^ +>values : () => IterableIterator<number, undefined> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>next : (...args: [] | [any]) => IteratorResult<number, undefined> +> : ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>value : number | undefined +> : ^^^^^^^^^^^^^^^^^^ + +// based on: https://github.com/microsoft/TypeScript/blob/15f67e0b482faf9f6a3ab9965f3c11196bf3e99b/src/harness/compilerImpl.ts#L77 +class MyMap implements Map<string, number> { +>MyMap : MyMap +> : ^^^^^ + + declare private _keys: string[]; +>_keys : string[] +> : ^^^^^^^^ + + declare private _values: number[]; +>_values : number[] +> : ^^^^^^^^ + + declare size: number; +>size : number +> : ^^^^^^ + + declare [Symbol.toStringTag]: string; +>[Symbol.toStringTag] : string +> : ^^^^^^ +>Symbol.toStringTag : unique symbol +> : ^^^^^^^^^^^^^ +>Symbol : SymbolConstructor +> : ^^^^^^^^^^^^^^^^^ +>toStringTag : unique symbol +> : ^^^^^^^^^^^^^ + + clear(): void { } +>clear : () => void +> : ^^^^^^ + + delete(key: string): boolean { return false; } +>delete : (key: string) => boolean +> : ^ ^^ ^^^^^ +>key : string +> : ^^^^^^ +>false : false +> : ^^^^^ + + forEach(callbackfn: (value: number, key: string, map: Map<string, number>) => void, thisArg?: any): void { } +>forEach : (callbackfn: (value: number, key: string, map: Map<string, number>) => void, thisArg?: any) => void +> : ^ ^^ ^^ ^^^ ^^^^^ +>callbackfn : (value: number, key: string, map: Map<string, number>) => void +> : ^ ^^ ^^ ^^ ^^ ^^ ^^^^^ +>value : number +> : ^^^^^^ +>key : string +> : ^^^^^^ +>map : Map<string, number> +> : ^^^^^^^^^^^^^^^^^^^ +>thisArg : any +> : ^^^ + + get(key: string): number | undefined { return undefined; } +>get : (key: string) => number | undefined +> : ^ ^^ ^^^^^ +>key : string +> : ^^^^^^ +>undefined : undefined +> : ^^^^^^^^^ + + has(key: string): boolean { return false; } +>has : (key: string) => boolean +> : ^ ^^ ^^^^^ +>key : string +> : ^^^^^^ +>false : false +> : ^^^^^ + + set(key: string, value: number): this { return this; } +>set : (key: string, value: number) => this +> : ^ ^^ ^^ ^^ ^^^^^ +>key : string +> : ^^^^^^ +>value : number +> : ^^^^^^ +>this : this +> : ^^^^ + + entries(): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } +>entries : () => IterableIterator<[string, number], BuiltinIteratorReturn> +> : ^^^^^^ +>new Error("Method not implemented.") : Error +> : ^^^^^ +>Error : ErrorConstructor +> : ^^^^^^^^^^^^^^^^ +>"Method not implemented." : "Method not implemented." +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ + + keys(): IterableIterator<string, BuiltinIteratorReturn> { throw new Error("Method not implemented."); } +>keys : () => IterableIterator<string, BuiltinIteratorReturn> +> : ^^^^^^ +>new Error("Method not implemented.") : Error +> : ^^^^^ +>Error : ErrorConstructor +> : ^^^^^^^^^^^^^^^^ +>"Method not implemented." : "Method not implemented." +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ + + [Symbol.iterator](): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } +>[Symbol.iterator] : () => IterableIterator<[string, number], BuiltinIteratorReturn> +> : ^^^^^^ +>Symbol.iterator : unique symbol +> : ^^^^^^^^^^^^^ +>Symbol : SymbolConstructor +> : ^^^^^^^^^^^^^^^^^ +>iterator : unique symbol +> : ^^^^^^^^^^^^^ +>new Error("Method not implemented.") : Error +> : ^^^^^ +>Error : ErrorConstructor +> : ^^^^^^^^^^^^^^^^ +>"Method not implemented." : "Method not implemented." +> : ^^^^^^^^^^^^^^^^^^^^^^^^^ + + // error when strictBuiltinIteratorReturn is true because values() has implicit `void` return, which isn't assignable to `undefined` + * values() { +>values : () => Generator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + yield* this._values; +>yield* this._values : undefined +> : ^^^^^^^^^ +>this._values : number[] +> : ^^^^^^^^ +>this : this +> : ^^^^ +>_values : number[] +> : ^^^^^^^^ + } +} + diff --git a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.errors.txt b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.errors.txt index 524c12bb6b3e0..13723c24505d7 100644 --- a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.errors.txt +++ b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.errors.txt @@ -1,17 +1,11 @@ -error TS6054: File 'b.js.map' has an unsupported extension. The only supported extensions are '.ts', '.tsx', '.d.ts', '.cts', '.d.cts', '.mts', '.d.mts'. - The file is in the program because: - Root file specified for compilation -error TS6504: File 'b.js' is a JavaScript file. Did you mean to enable the 'allowJs' option? +error TS6054: File 'b.js.map' has an unsupported extension. The only supported extensions are '.ts', '.tsx', '.d.ts', '.js', '.jsx', '.cts', '.d.cts', '.cjs', '.mts', '.d.mts', '.mjs'. The file is in the program because: Root file specified for compilation -!!! error TS6054: File 'b.js.map' has an unsupported extension. The only supported extensions are '.ts', '.tsx', '.d.ts', '.cts', '.d.cts', '.mts', '.d.mts'. +!!! error TS6054: File 'b.js.map' has an unsupported extension. The only supported extensions are '.ts', '.tsx', '.d.ts', '.js', '.jsx', '.cts', '.d.cts', '.cjs', '.mts', '.d.mts', '.mjs'. !!! error TS6054: The file is in the program because: !!! error TS6054: Root file specified for compilation -!!! error TS6504: File 'b.js' is a JavaScript file. Did you mean to enable the 'allowJs' option? -!!! error TS6504: The file is in the program because: -!!! error TS6504: Root file specified for compilation ==== a.ts (0 errors) ==== class c { } diff --git a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.js b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.js index 9fc16e26cd5de..ed21437983493 100644 --- a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.js +++ b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.js @@ -18,4 +18,8 @@ var c = /** @class */ (function () { } return c; }()); -//# sourceMappingURL=a.js.map \ No newline at end of file +//# sourceMappingURL=a.js.map +//// [b.js] +function bar() { +} +//# sourceMappingURL=b.js.map \ No newline at end of file diff --git a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.js.map b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.js.map index 2291166790d3f..7cc002476841d 100644 --- a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.js.map +++ b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.js.map @@ -1,2 +1,4 @@ //// [a.js.map] -{"version":3,"file":"a.js","sourceRoot":"","sources":["../a.ts"],"names":[],"mappings":"AAAA;IAAA;IACA,CAAC;IAAD,QAAC;AAAD,CAAC,AADD,IACC"} \ No newline at end of file +{"version":3,"file":"a.js","sourceRoot":"","sources":["../a.ts"],"names":[],"mappings":"AAAA;IAAA;IACA,CAAC;IAAD,QAAC;AAAD,CAAC,AADD,IACC"} +//// [b.js.map] +{"version":3,"file":"b.js","sourceRoot":"","sources":["../b.js"],"names":[],"mappings":"AAAA,SAAS,GAAG;AACZ,CAAC"} \ No newline at end of file diff --git a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.sourcemap.txt b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.sourcemap.txt index d9a7622e95568..a00057db7c49b 100644 --- a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.sourcemap.txt +++ b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.sourcemap.txt @@ -54,4 +54,35 @@ sourceFile:../a.ts 3 >Emitted(5, 2) Source(1, 1) + SourceIndex(0) 4 >Emitted(5, 6) Source(2, 2) + SourceIndex(0) --- ->>>//# sourceMappingURL=a.js.map \ No newline at end of file +>>>//# sourceMappingURL=a.js.map=================================================================== +JsFile: b.js +mapUrl: b.js.map +sourceRoot: +sources: ../b.js +=================================================================== +------------------------------------------------------------------- +emittedFile:out/b.js +sourceFile:../b.js +------------------------------------------------------------------- +>>>function bar() { +1 > +2 >^^^^^^^^^ +3 > ^^^ +1 > +2 >function +3 > bar +1 >Emitted(1, 1) Source(1, 1) + SourceIndex(0) +2 >Emitted(1, 10) Source(1, 10) + SourceIndex(0) +3 >Emitted(1, 13) Source(1, 13) + SourceIndex(0) +--- +>>>} +1 > +2 >^ +3 > ^^^^^^^^^^^^^^^^^^^^^^^^^^^-> +1 >() { + > +2 >} +1 >Emitted(2, 1) Source(2, 1) + SourceIndex(0) +2 >Emitted(2, 2) Source(2, 2) + SourceIndex(0) +--- +>>>//# sourceMappingURL=b.js.map \ No newline at end of file diff --git a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.symbols b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.symbols index 23c4abec429c9..822b9551f655b 100644 --- a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.symbols +++ b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.symbols @@ -5,3 +5,7 @@ class c { >c : Symbol(c, Decl(a.ts, 0, 0)) } +=== b.js === +function bar() { +>bar : Symbol(bar, Decl(b.js, 0, 0)) +} diff --git a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.types b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.types index 2dcd08b59fadd..db36a88424832 100644 --- a/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.types +++ b/tests/baselines/reference/jsFileCompilationWithMapFileAsJsWithOutDir.types @@ -6,3 +6,8 @@ class c { > : ^ } +=== b.js === +function bar() { +>bar : () => void +> : ^^^^^^^^^^ +} diff --git a/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty.types b/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty.types index 5297e055ec2ac..b64ece233e183 100644 --- a/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty.types +++ b/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty.types @@ -6,14 +6,14 @@ declare let tgt2: number[]; > : ^^^^^^^^ declare let src2: { [K in keyof number[] as Exclude<K, "length">]: (number[])[K] }; ->src2 : { [x: number]: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { <S extends number>(predicate: (value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator<number>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D) => FlatArray<A, D>[]; [Symbol.iterator]: () => IterableIterator<number>; readonly [Symbol.unscopables]: { [x: number]: boolean; length?: boolean; toString?: boolean; toLocaleString?: boolean; pop?: boolean; push?: boolean; concat?: boolean; join?: boolean; reverse?: boolean; shift?: boolean; slice?: boolean; sort?: boolean; splice?: boolean; unshift?: boolean; indexOf?: boolean; lastIndexOf?: boolean; every?: boolean; some?: boolean; forEach?: boolean; map?: boolean; filter?: boolean; reduce?: boolean; reduceRight?: boolean; find?: boolean; findIndex?: boolean; fill?: boolean; copyWithin?: boolean; entries?: boolean; keys?: boolean; values?: boolean; includes?: boolean; flatMap?: boolean; flat?: boolean; [Symbol.iterator]?: boolean; readonly [Symbol.unscopables]?: boolean; }; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^ ^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>src2 : { [x: number]: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { <S extends number>(predicate: (value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator<number, BuiltinIteratorReturn>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D) => FlatArray<A, D>[]; [Symbol.iterator]: () => IterableIterator<number>; readonly [Symbol.unscopables]: { [x: number]: boolean; length?: boolean; toString?: boolean; toLocaleString?: boolean; pop?: boolean; push?: boolean; concat?: boolean; join?: boolean; reverse?: boolean; shift?: boolean; slice?: boolean; sort?: boolean; splice?: boolean; unshift?: boolean; indexOf?: boolean; lastIndexOf?: boolean; every?: boolean; some?: boolean; forEach?: boolean; map?: boolean; filter?: boolean; reduce?: boolean; reduceRight?: boolean; find?: boolean; findIndex?: boolean; fill?: boolean; copyWithin?: boolean; entries?: boolean; keys?: boolean; values?: boolean; includes?: boolean; flatMap?: boolean; flat?: boolean; [Symbol.iterator]?: boolean; readonly [Symbol.unscopables]?: boolean; }; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^ ^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tgt2 = src2; // Should error ->tgt2 = src2 : { [x: number]: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { <S extends number>(predicate: (value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator<number>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D) => FlatArray<A, D>[]; [Symbol.iterator]: () => IterableIterator<number>; readonly [Symbol.unscopables]: { [x: number]: boolean; length?: boolean; toString?: boolean; toLocaleString?: boolean; pop?: boolean; push?: boolean; concat?: boolean; join?: boolean; reverse?: boolean; shift?: boolean; slice?: boolean; sort?: boolean; splice?: boolean; unshift?: boolean; indexOf?: boolean; lastIndexOf?: boolean; every?: boolean; some?: boolean; forEach?: boolean; map?: boolean; filter?: boolean; reduce?: boolean; reduceRight?: boolean; find?: boolean; findIndex?: boolean; fill?: boolean; copyWithin?: boolean; entries?: boolean; keys?: boolean; values?: boolean; includes?: boolean; flatMap?: boolean; flat?: boolean; [Symbol.iterator]?: boolean; readonly [Symbol.unscopables]?: boolean; }; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^ ^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>tgt2 = src2 : { [x: number]: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { <S extends number>(predicate: (value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator<number, BuiltinIteratorReturn>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D) => FlatArray<A, D>[]; [Symbol.iterator]: () => IterableIterator<number>; readonly [Symbol.unscopables]: { [x: number]: boolean; length?: boolean; toString?: boolean; toLocaleString?: boolean; pop?: boolean; push?: boolean; concat?: boolean; join?: boolean; reverse?: boolean; shift?: boolean; slice?: boolean; sort?: boolean; splice?: boolean; unshift?: boolean; indexOf?: boolean; lastIndexOf?: boolean; every?: boolean; some?: boolean; forEach?: boolean; map?: boolean; filter?: boolean; reduce?: boolean; reduceRight?: boolean; find?: boolean; findIndex?: boolean; fill?: boolean; copyWithin?: boolean; entries?: boolean; keys?: boolean; values?: boolean; includes?: boolean; flatMap?: boolean; flat?: boolean; [Symbol.iterator]?: boolean; readonly [Symbol.unscopables]?: boolean; }; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^ ^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >tgt2 : number[] > : ^^^^^^^^ ->src2 : { [x: number]: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { <S extends number>(predicate: (value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator<number>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D) => FlatArray<A, D>[]; [Symbol.iterator]: () => IterableIterator<number>; readonly [Symbol.unscopables]: { [x: number]: boolean; length?: boolean; toString?: boolean; toLocaleString?: boolean; pop?: boolean; push?: boolean; concat?: boolean; join?: boolean; reverse?: boolean; shift?: boolean; slice?: boolean; sort?: boolean; splice?: boolean; unshift?: boolean; indexOf?: boolean; lastIndexOf?: boolean; every?: boolean; some?: boolean; forEach?: boolean; map?: boolean; filter?: boolean; reduce?: boolean; reduceRight?: boolean; find?: boolean; findIndex?: boolean; fill?: boolean; copyWithin?: boolean; entries?: boolean; keys?: boolean; values?: boolean; includes?: boolean; flatMap?: boolean; flat?: boolean; [Symbol.iterator]?: boolean; readonly [Symbol.unscopables]?: boolean; }; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^ ^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>src2 : { [x: number]: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { <S extends number>(predicate: (value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator<number, BuiltinIteratorReturn>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D) => FlatArray<A, D>[]; [Symbol.iterator]: () => IterableIterator<number>; readonly [Symbol.unscopables]: { [x: number]: boolean; length?: boolean; toString?: boolean; toLocaleString?: boolean; pop?: boolean; push?: boolean; concat?: boolean; join?: boolean; reverse?: boolean; shift?: boolean; slice?: boolean; sort?: boolean; splice?: boolean; unshift?: boolean; indexOf?: boolean; lastIndexOf?: boolean; every?: boolean; some?: boolean; forEach?: boolean; map?: boolean; filter?: boolean; reduce?: boolean; reduceRight?: boolean; find?: boolean; findIndex?: boolean; fill?: boolean; copyWithin?: boolean; entries?: boolean; keys?: boolean; values?: boolean; includes?: boolean; flatMap?: boolean; flat?: boolean; [Symbol.iterator]?: boolean; readonly [Symbol.unscopables]?: boolean; }; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^ ^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty2.js b/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty2.js index b143900a08085..82e67a1e2c47f 100644 --- a/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty2.js +++ b/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty2.js @@ -63,7 +63,7 @@ export declare const thing: { fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; - keys: () => IterableIterator<number>; + keys: () => IterableIterator<number, BuiltinIteratorReturn>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; @@ -172,7 +172,7 @@ mappedTypeWithAsClauseAndLateBoundProperty2.d.ts(27,118): error TS2526: A 'this' fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; - keys: () => IterableIterator<number>; + keys: () => IterableIterator<number, BuiltinIteratorReturn>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; diff --git a/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty2.types b/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty2.types index a58dddd838214..17e5229e64b8d 100644 --- a/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty2.types +++ b/tests/baselines/reference/mappedTypeWithAsClauseAndLateBoundProperty2.types @@ -2,11 +2,11 @@ === mappedTypeWithAsClauseAndLateBoundProperty2.ts === export const thing = (null as any as { [K in keyof number[] as Exclude<K, "length">]: (number[])[K] }); ->thing : { [x: number]: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { <S extends number>(predicate: (value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator<number>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D) => FlatArray<A, D>[]; [Symbol.iterator]: () => IterableIterator<number>; readonly [Symbol.unscopables]: { [x: number]: boolean; length?: boolean; toString?: boolean; toLocaleString?: boolean; pop?: boolean; push?: boolean; concat?: boolean; join?: boolean; reverse?: boolean; shift?: boolean; slice?: boolean; sort?: boolean; splice?: boolean; unshift?: boolean; indexOf?: boolean; lastIndexOf?: boolean; every?: boolean; some?: boolean; forEach?: boolean; map?: boolean; filter?: boolean; reduce?: boolean; reduceRight?: boolean; find?: boolean; findIndex?: boolean; fill?: boolean; copyWithin?: boolean; entries?: boolean; keys?: boolean; values?: boolean; includes?: boolean; flatMap?: boolean; flat?: boolean; [Symbol.iterator]?: boolean; readonly [Symbol.unscopables]?: boolean; }; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^ ^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->(null as any as { [K in keyof number[] as Exclude<K, "length">]: (number[])[K] }) : { [x: number]: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { <S extends number>(predicate: (value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator<number>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D) => FlatArray<A, D>[]; [Symbol.iterator]: () => IterableIterator<number>; readonly [Symbol.unscopables]: { [x: number]: boolean; length?: boolean; toString?: boolean; toLocaleString?: boolean; pop?: boolean; push?: boolean; concat?: boolean; join?: boolean; reverse?: boolean; shift?: boolean; slice?: boolean; sort?: boolean; splice?: boolean; unshift?: boolean; indexOf?: boolean; lastIndexOf?: boolean; every?: boolean; some?: boolean; forEach?: boolean; map?: boolean; filter?: boolean; reduce?: boolean; reduceRight?: boolean; find?: boolean; findIndex?: boolean; fill?: boolean; copyWithin?: boolean; entries?: boolean; keys?: boolean; values?: boolean; includes?: boolean; flatMap?: boolean; flat?: boolean; [Symbol.iterator]?: boolean; readonly [Symbol.unscopables]?: boolean; }; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^ ^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->null as any as { [K in keyof number[] as Exclude<K, "length">]: (number[])[K] } : { [x: number]: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { <S extends number>(predicate: (value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator<number>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D) => FlatArray<A, D>[]; [Symbol.iterator]: () => IterableIterator<number>; readonly [Symbol.unscopables]: { [x: number]: boolean; length?: boolean; toString?: boolean; toLocaleString?: boolean; pop?: boolean; push?: boolean; concat?: boolean; join?: boolean; reverse?: boolean; shift?: boolean; slice?: boolean; sort?: boolean; splice?: boolean; unshift?: boolean; indexOf?: boolean; lastIndexOf?: boolean; every?: boolean; some?: boolean; forEach?: boolean; map?: boolean; filter?: boolean; reduce?: boolean; reduceRight?: boolean; find?: boolean; findIndex?: boolean; fill?: boolean; copyWithin?: boolean; entries?: boolean; keys?: boolean; values?: boolean; includes?: boolean; flatMap?: boolean; flat?: boolean; [Symbol.iterator]?: boolean; readonly [Symbol.unscopables]?: boolean; }; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^ ^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>thing : { [x: number]: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { <S extends number>(predicate: (value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator<number, BuiltinIteratorReturn>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D) => FlatArray<A, D>[]; [Symbol.iterator]: () => IterableIterator<number>; readonly [Symbol.unscopables]: { [x: number]: boolean; length?: boolean; toString?: boolean; toLocaleString?: boolean; pop?: boolean; push?: boolean; concat?: boolean; join?: boolean; reverse?: boolean; shift?: boolean; slice?: boolean; sort?: boolean; splice?: boolean; unshift?: boolean; indexOf?: boolean; lastIndexOf?: boolean; every?: boolean; some?: boolean; forEach?: boolean; map?: boolean; filter?: boolean; reduce?: boolean; reduceRight?: boolean; find?: boolean; findIndex?: boolean; fill?: boolean; copyWithin?: boolean; entries?: boolean; keys?: boolean; values?: boolean; includes?: boolean; flatMap?: boolean; flat?: boolean; [Symbol.iterator]?: boolean; readonly [Symbol.unscopables]?: boolean; }; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^ ^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(null as any as { [K in keyof number[] as Exclude<K, "length">]: (number[])[K] }) : { [x: number]: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { <S extends number>(predicate: (value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator<number, BuiltinIteratorReturn>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D) => FlatArray<A, D>[]; [Symbol.iterator]: () => IterableIterator<number>; readonly [Symbol.unscopables]: { [x: number]: boolean; length?: boolean; toString?: boolean; toLocaleString?: boolean; pop?: boolean; push?: boolean; concat?: boolean; join?: boolean; reverse?: boolean; shift?: boolean; slice?: boolean; sort?: boolean; splice?: boolean; unshift?: boolean; indexOf?: boolean; lastIndexOf?: boolean; every?: boolean; some?: boolean; forEach?: boolean; map?: boolean; filter?: boolean; reduce?: boolean; reduceRight?: boolean; find?: boolean; findIndex?: boolean; fill?: boolean; copyWithin?: boolean; entries?: boolean; keys?: boolean; values?: boolean; includes?: boolean; flatMap?: boolean; flat?: boolean; [Symbol.iterator]?: boolean; readonly [Symbol.unscopables]?: boolean; }; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^ ^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>null as any as { [K in keyof number[] as Exclude<K, "length">]: (number[])[K] } : { [x: number]: number; toString: () => string; toLocaleString: { (): string; (locales: string | string[], options?: Intl.NumberFormatOptions & Intl.DateTimeFormatOptions): string; }; pop: () => number; push: (...items: number[]) => number; concat: { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }; join: (separator?: string) => string; reverse: () => number[]; shift: () => number; slice: (start?: number, end?: number) => number[]; sort: (compareFn?: (a: number, b: number) => number) => number[]; splice: { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; }; unshift: (...items: number[]) => number; indexOf: (searchElement: number, fromIndex?: number) => number; lastIndexOf: (searchElement: number, fromIndex?: number) => number; every: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): this is S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): boolean; }; some: (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean; forEach: (callbackfn: (value: number, index: number, array: number[]) => void, thisArg?: any) => void; map: <U>(callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[]; filter: { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }; reduce: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; reduceRight: { (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number): number; (callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: number[]) => number, initialValue: number): number; <U>(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: number[]) => U, initialValue: U): U; }; find: { <S extends number>(predicate: (value: number, index: number, obj: number[]) => value is S, thisArg?: any): S; (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any): number; }; findIndex: (predicate: (value: number, index: number, obj: number[]) => unknown, thisArg?: any) => number; fill: (value: number, start?: number, end?: number) => number[]; copyWithin: (target: number, start: number, end?: number) => number[]; entries: () => IterableIterator<[number, number]>; keys: () => IterableIterator<number, BuiltinIteratorReturn>; values: () => IterableIterator<number>; includes: (searchElement: number, fromIndex?: number) => boolean; flatMap: <U, This = undefined>(callback: (this: This, value: number, index: number, array: number[]) => U | readonly U[], thisArg?: This) => U[]; flat: <A, D extends number = 1>(this: A, depth?: D) => FlatArray<A, D>[]; [Symbol.iterator]: () => IterableIterator<number>; readonly [Symbol.unscopables]: { [x: number]: boolean; length?: boolean; toString?: boolean; toLocaleString?: boolean; pop?: boolean; push?: boolean; concat?: boolean; join?: boolean; reverse?: boolean; shift?: boolean; slice?: boolean; sort?: boolean; splice?: boolean; unshift?: boolean; indexOf?: boolean; lastIndexOf?: boolean; every?: boolean; some?: boolean; forEach?: boolean; map?: boolean; filter?: boolean; reduce?: boolean; reduceRight?: boolean; find?: boolean; findIndex?: boolean; fill?: boolean; copyWithin?: boolean; entries?: boolean; keys?: boolean; values?: boolean; includes?: boolean; flatMap?: boolean; flat?: boolean; [Symbol.iterator]?: boolean; readonly [Symbol.unscopables]?: boolean; }; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ ^ ^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^ ^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^ ^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^ ^^^^^ ^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ ^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^ ^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >null as any : any diff --git a/tests/baselines/reference/parser.asyncGenerators.classMethods.es2018.types b/tests/baselines/reference/parser.asyncGenerators.classMethods.es2018.types index a9a8e5c0baae5..41859c1f7190e 100644 --- a/tests/baselines/reference/parser.asyncGenerators.classMethods.es2018.types +++ b/tests/baselines/reference/parser.asyncGenerators.classMethods.es2018.types @@ -221,8 +221,8 @@ class C16 { > : ^^^ async * f() { ->f : () => AsyncGenerator<any, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f : () => AsyncGenerator<any, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield * []; >yield * [] : any diff --git a/tests/baselines/reference/parser.asyncGenerators.functionDeclarations.es2018.types b/tests/baselines/reference/parser.asyncGenerators.functionDeclarations.es2018.types index c07b24af13d86..145171838a86b 100644 --- a/tests/baselines/reference/parser.asyncGenerators.functionDeclarations.es2018.types +++ b/tests/baselines/reference/parser.asyncGenerators.functionDeclarations.es2018.types @@ -142,8 +142,8 @@ async function * f15() { } === yieldStarWithValueIsOk.ts === async function * f16() { ->f16 : () => AsyncGenerator<any, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f16 : () => AsyncGenerator<any, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield * []; >yield * [] : any diff --git a/tests/baselines/reference/parser.asyncGenerators.functionExpressions.es2018.types b/tests/baselines/reference/parser.asyncGenerators.functionExpressions.es2018.types index 2eb736f48a6a1..9082a5732d5a0 100644 --- a/tests/baselines/reference/parser.asyncGenerators.functionExpressions.es2018.types +++ b/tests/baselines/reference/parser.asyncGenerators.functionExpressions.es2018.types @@ -188,10 +188,10 @@ const f15 = async function * () { }; === yieldStarWithValueIsOk.ts === const f16 = async function * () { ->f16 : () => AsyncGenerator<any, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { yield * [];} : () => AsyncGenerator<any, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f16 : () => AsyncGenerator<any, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield * [];} : () => AsyncGenerator<any, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield * []; >yield * [] : any diff --git a/tests/baselines/reference/parser.asyncGenerators.objectLiteralMethods.es2018.types b/tests/baselines/reference/parser.asyncGenerators.objectLiteralMethods.es2018.types index fe75d811809d3..a1c287cfa1fd3 100644 --- a/tests/baselines/reference/parser.asyncGenerators.objectLiteralMethods.es2018.types +++ b/tests/baselines/reference/parser.asyncGenerators.objectLiteralMethods.es2018.types @@ -247,14 +247,14 @@ const o15 = { }; === yieldStarWithValueIsOk.ts === const o16 = { ->o16 : { f(): AsyncGenerator<any, void, undefined>; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->{ async * f() { yield * []; }} : { f(): AsyncGenerator<any, void, undefined>; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>o16 : { f(): AsyncGenerator<any, void, any>; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>{ async * f() { yield * []; }} : { f(): AsyncGenerator<any, void, any>; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ async * f() { ->f : () => AsyncGenerator<any, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>f : () => AsyncGenerator<any, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield * []; >yield * [] : any diff --git a/tests/baselines/reference/regexMatchAll-esnext.types b/tests/baselines/reference/regexMatchAll-esnext.types index e8048eb9db3a4..222721c3f5927 100644 --- a/tests/baselines/reference/regexMatchAll-esnext.types +++ b/tests/baselines/reference/regexMatchAll-esnext.types @@ -6,8 +6,8 @@ const matches = /\w/g[Symbol.matchAll]("matchAll"); > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >/\w/g[Symbol.matchAll]("matchAll") : IterableIterator<RegExpMatchArray> > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->/\w/g[Symbol.matchAll] : (str: string) => IterableIterator<RegExpMatchArray> -> : ^ ^^ ^^^^^ +>/\w/g[Symbol.matchAll] : (str: string) => IterableIterator<RegExpMatchArray, BuiltinIteratorReturn> +> : ^ ^^ ^^^^^ >/\w/g : RegExp > : ^^^^^^ >Symbol.matchAll : unique symbol diff --git a/tests/baselines/reference/regexMatchAll.types b/tests/baselines/reference/regexMatchAll.types index acfc292ace79f..53a391b22ee3d 100644 --- a/tests/baselines/reference/regexMatchAll.types +++ b/tests/baselines/reference/regexMatchAll.types @@ -6,8 +6,8 @@ const matches = /\w/g[Symbol.matchAll]("matchAll"); > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >/\w/g[Symbol.matchAll]("matchAll") : IterableIterator<RegExpMatchArray> > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->/\w/g[Symbol.matchAll] : (str: string) => IterableIterator<RegExpMatchArray> -> : ^ ^^ ^^^^^ +>/\w/g[Symbol.matchAll] : (str: string) => IterableIterator<RegExpMatchArray, BuiltinIteratorReturn> +> : ^ ^^ ^^^^^ >/\w/g : RegExp > : ^^^^^^ >Symbol.matchAll : unique symbol diff --git a/tests/baselines/reference/stringMatchAll.types b/tests/baselines/reference/stringMatchAll.types index a107b9eb3fd5b..12f4460a2e8d6 100644 --- a/tests/baselines/reference/stringMatchAll.types +++ b/tests/baselines/reference/stringMatchAll.types @@ -6,12 +6,12 @@ const matches = "matchAll".matchAll(/\w/g); > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >"matchAll".matchAll(/\w/g) : IterableIterator<RegExpExecArray> > : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->"matchAll".matchAll : (regexp: RegExp) => IterableIterator<RegExpExecArray> -> : ^ ^^ ^^^^^ +>"matchAll".matchAll : (regexp: RegExp) => IterableIterator<RegExpExecArray, BuiltinIteratorReturn> +> : ^ ^^ ^^^^^ >"matchAll" : "matchAll" > : ^^^^^^^^^^ ->matchAll : (regexp: RegExp) => IterableIterator<RegExpExecArray> -> : ^ ^^ ^^^^^ +>matchAll : (regexp: RegExp) => IterableIterator<RegExpExecArray, BuiltinIteratorReturn> +> : ^ ^^ ^^^^^ >/\w/g : RegExp > : ^^^^^^ diff --git a/tests/baselines/reference/types.asyncGenerators.es2018.1.types b/tests/baselines/reference/types.asyncGenerators.es2018.1.types index 2a9d1eb54db4d..2d2f8df98e490 100644 --- a/tests/baselines/reference/types.asyncGenerators.es2018.1.types +++ b/tests/baselines/reference/types.asyncGenerators.es2018.1.types @@ -61,8 +61,8 @@ async function * inferReturnType5() { > : ^ } async function * inferReturnType6() { ->inferReturnType6 : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>inferReturnType6 : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* [1, 2]; >yield* [1, 2] : any @@ -74,8 +74,8 @@ async function * inferReturnType6() { > : ^ } async function * inferReturnType7() { ->inferReturnType7 : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>inferReturnType7 : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* [Promise.resolve(1)]; >yield* [Promise.resolve(1)] : any @@ -112,12 +112,11 @@ async function * inferReturnType8() { const assignability1: () => AsyncIterableIterator<number> = async function * () { >assignability1 : () => AsyncIterableIterator<number> > : ^^^^^^ ->async function * () { yield 1;} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield 1;} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield 1; ->yield 1 : undefined -> : ^^^^^^^^^ +>yield 1 : any >1 : 1 > : ^ @@ -125,12 +124,11 @@ const assignability1: () => AsyncIterableIterator<number> = async function * () const assignability2: () => AsyncIterableIterator<number> = async function * () { >assignability2 : () => AsyncIterableIterator<number> > : ^^^^^^ ->async function * () { yield Promise.resolve(1);} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield Promise.resolve(1);} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield Promise.resolve(1); ->yield Promise.resolve(1) : undefined -> : ^^^^^^^^^ +>yield Promise.resolve(1) : any >Promise.resolve(1) : Promise<number> > : ^^^^^^^^^^^^^^^ >Promise.resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T>(value: T | PromiseLike<T>): Promise<Awaited<T>>; } @@ -146,8 +144,8 @@ const assignability2: () => AsyncIterableIterator<number> = async function * () const assignability3: () => AsyncIterableIterator<number> = async function * () { >assignability3 : () => AsyncIterableIterator<number> > : ^^^^^^ ->async function * () { yield* [1, 2];} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* [1, 2];} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* [1, 2]; >yield* [1, 2] : any @@ -162,8 +160,8 @@ const assignability3: () => AsyncIterableIterator<number> = async function * () const assignability4: () => AsyncIterableIterator<number> = async function * () { >assignability4 : () => AsyncIterableIterator<number> > : ^^^^^^ ->async function * () { yield* [Promise.resolve(1)];} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* [Promise.resolve(1)];} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* [Promise.resolve(1)]; >yield* [Promise.resolve(1)] : any @@ -184,20 +182,19 @@ const assignability4: () => AsyncIterableIterator<number> = async function * () const assignability5: () => AsyncIterableIterator<number> = async function * () { >assignability5 : () => AsyncIterableIterator<number> > : ^^^^^^ ->async function * () { yield* (async function * () { yield 1; })();} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* (async function * () { yield 1; })();} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* (async function * () { yield 1; })(); >yield* (async function * () { yield 1; })() : void > : ^^^^ ->(async function * () { yield 1; })() : AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->(async function * () { yield 1; }) : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { yield 1; } : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->yield 1 : undefined -> : ^^^^^^^^^ +>(async function * () { yield 1; })() : AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(async function * () { yield 1; }) : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield 1; } : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield 1 : any >1 : 1 > : ^ @@ -205,12 +202,11 @@ const assignability5: () => AsyncIterableIterator<number> = async function * () const assignability6: () => AsyncIterable<number> = async function * () { >assignability6 : () => AsyncIterable<number> > : ^^^^^^ ->async function * () { yield 1;} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield 1;} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield 1; ->yield 1 : undefined -> : ^^^^^^^^^ +>yield 1 : any >1 : 1 > : ^ @@ -218,12 +214,11 @@ const assignability6: () => AsyncIterable<number> = async function * () { const assignability7: () => AsyncIterable<number> = async function * () { >assignability7 : () => AsyncIterable<number> > : ^^^^^^ ->async function * () { yield Promise.resolve(1);} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield Promise.resolve(1);} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield Promise.resolve(1); ->yield Promise.resolve(1) : undefined -> : ^^^^^^^^^ +>yield Promise.resolve(1) : any >Promise.resolve(1) : Promise<number> > : ^^^^^^^^^^^^^^^ >Promise.resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T>(value: T | PromiseLike<T>): Promise<Awaited<T>>; } @@ -239,8 +234,8 @@ const assignability7: () => AsyncIterable<number> = async function * () { const assignability8: () => AsyncIterable<number> = async function * () { >assignability8 : () => AsyncIterable<number> > : ^^^^^^ ->async function * () { yield* [1, 2];} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* [1, 2];} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* [1, 2]; >yield* [1, 2] : any @@ -255,8 +250,8 @@ const assignability8: () => AsyncIterable<number> = async function * () { const assignability9: () => AsyncIterable<number> = async function * () { >assignability9 : () => AsyncIterable<number> > : ^^^^^^ ->async function * () { yield* [Promise.resolve(1)];} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* [Promise.resolve(1)];} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* [Promise.resolve(1)]; >yield* [Promise.resolve(1)] : any @@ -277,20 +272,19 @@ const assignability9: () => AsyncIterable<number> = async function * () { const assignability10: () => AsyncIterable<number> = async function * () { >assignability10 : () => AsyncIterable<number> > : ^^^^^^ ->async function * () { yield* (async function * () { yield 1; })();} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* (async function * () { yield 1; })();} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* (async function * () { yield 1; })(); >yield* (async function * () { yield 1; })() : void > : ^^^^ ->(async function * () { yield 1; })() : AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->(async function * () { yield 1; }) : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { yield 1; } : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->yield 1 : undefined -> : ^^^^^^^^^ +>(async function * () { yield 1; })() : AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(async function * () { yield 1; }) : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield 1; } : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield 1 : any >1 : 1 > : ^ @@ -298,12 +292,11 @@ const assignability10: () => AsyncIterable<number> = async function * () { const assignability11: () => AsyncIterator<number> = async function * () { >assignability11 : () => AsyncIterator<number> > : ^^^^^^ ->async function * () { yield 1;} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield 1;} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield 1; ->yield 1 : undefined -> : ^^^^^^^^^ +>yield 1 : any >1 : 1 > : ^ @@ -311,12 +304,11 @@ const assignability11: () => AsyncIterator<number> = async function * () { const assignability12: () => AsyncIterator<number> = async function * () { >assignability12 : () => AsyncIterator<number> > : ^^^^^^ ->async function * () { yield Promise.resolve(1);} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield Promise.resolve(1);} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield Promise.resolve(1); ->yield Promise.resolve(1) : undefined -> : ^^^^^^^^^ +>yield Promise.resolve(1) : any >Promise.resolve(1) : Promise<number> > : ^^^^^^^^^^^^^^^ >Promise.resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T>(value: T | PromiseLike<T>): Promise<Awaited<T>>; } @@ -332,8 +324,8 @@ const assignability12: () => AsyncIterator<number> = async function * () { const assignability13: () => AsyncIterator<number> = async function * () { >assignability13 : () => AsyncIterator<number> > : ^^^^^^ ->async function * () { yield* [1, 2];} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* [1, 2];} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* [1, 2]; >yield* [1, 2] : any @@ -348,8 +340,8 @@ const assignability13: () => AsyncIterator<number> = async function * () { const assignability14: () => AsyncIterator<number> = async function * () { >assignability14 : () => AsyncIterator<number> > : ^^^^^^ ->async function * () { yield* [Promise.resolve(1)];} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* [Promise.resolve(1)];} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* [Promise.resolve(1)]; >yield* [Promise.resolve(1)] : any @@ -370,20 +362,19 @@ const assignability14: () => AsyncIterator<number> = async function * () { const assignability15: () => AsyncIterator<number> = async function * () { >assignability15 : () => AsyncIterator<number> > : ^^^^^^ ->async function * () { yield* (async function * () { yield 1; })();} : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* (async function * () { yield 1; })();} : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* (async function * () { yield 1; })(); >yield* (async function * () { yield 1; })() : void > : ^^^^ ->(async function * () { yield 1; })() : AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->(async function * () { yield 1; }) : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { yield 1; } : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->yield 1 : undefined -> : ^^^^^^^^^ +>(async function * () { yield 1; })() : AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(async function * () { yield 1; }) : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield 1; } : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield 1 : any >1 : 1 > : ^ @@ -393,8 +384,7 @@ async function * explicitReturnType1(): AsyncIterableIterator<number> { > : ^^^^^^ yield 1; ->yield 1 : undefined -> : ^^^^^^^^^ +>yield 1 : any >1 : 1 > : ^ } @@ -403,8 +393,7 @@ async function * explicitReturnType2(): AsyncIterableIterator<number> { > : ^^^^^^ yield Promise.resolve(1); ->yield Promise.resolve(1) : undefined -> : ^^^^^^^^^ +>yield Promise.resolve(1) : any >Promise.resolve(1) : Promise<number> > : ^^^^^^^^^^^^^^^ >Promise.resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T>(value: T | PromiseLike<T>): Promise<Awaited<T>>; } @@ -455,14 +444,13 @@ async function * explicitReturnType5(): AsyncIterableIterator<number> { yield* (async function * () { yield 1; })(); >yield* (async function * () { yield 1; })() : void > : ^^^^ ->(async function * () { yield 1; })() : AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->(async function * () { yield 1; }) : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { yield 1; } : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->yield 1 : undefined -> : ^^^^^^^^^ +>(async function * () { yield 1; })() : AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(async function * () { yield 1; }) : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield 1; } : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield 1 : any >1 : 1 > : ^ } @@ -471,8 +459,7 @@ async function * explicitReturnType6(): AsyncIterable<number> { > : ^^^^^^ yield 1; ->yield 1 : undefined -> : ^^^^^^^^^ +>yield 1 : any >1 : 1 > : ^ } @@ -481,8 +468,7 @@ async function * explicitReturnType7(): AsyncIterable<number> { > : ^^^^^^ yield Promise.resolve(1); ->yield Promise.resolve(1) : undefined -> : ^^^^^^^^^ +>yield Promise.resolve(1) : any >Promise.resolve(1) : Promise<number> > : ^^^^^^^^^^^^^^^ >Promise.resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T>(value: T | PromiseLike<T>): Promise<Awaited<T>>; } @@ -533,14 +519,13 @@ async function * explicitReturnType10(): AsyncIterable<number> { yield* (async function * () { yield 1; })(); >yield* (async function * () { yield 1; })() : void > : ^^^^ ->(async function * () { yield 1; })() : AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->(async function * () { yield 1; }) : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { yield 1; } : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->yield 1 : undefined -> : ^^^^^^^^^ +>(async function * () { yield 1; })() : AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(async function * () { yield 1; }) : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield 1; } : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield 1 : any >1 : 1 > : ^ } @@ -549,8 +534,7 @@ async function * explicitReturnType11(): AsyncIterator<number> { > : ^^^^^^ yield 1; ->yield 1 : undefined -> : ^^^^^^^^^ +>yield 1 : any >1 : 1 > : ^ } @@ -559,8 +543,7 @@ async function * explicitReturnType12(): AsyncIterator<number> { > : ^^^^^^ yield Promise.resolve(1); ->yield Promise.resolve(1) : undefined -> : ^^^^^^^^^ +>yield Promise.resolve(1) : any >Promise.resolve(1) : Promise<number> > : ^^^^^^^^^^^^^^^ >Promise.resolve : { (): Promise<void>; <T>(value: T): Promise<Awaited<T>>; <T>(value: T | PromiseLike<T>): Promise<Awaited<T>>; } @@ -611,14 +594,13 @@ async function * explicitReturnType15(): AsyncIterator<number> { yield* (async function * () { yield 1; })(); >yield* (async function * () { yield 1; })() : void > : ^^^^ ->(async function * () { yield 1; })() : AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->(async function * () { yield 1; }) : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { yield 1; } : () => AsyncGenerator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->yield 1 : undefined -> : ^^^^^^^^^ +>(async function * () { yield 1; })() : AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(async function * () { yield 1; }) : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield 1; } : () => AsyncGenerator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield 1 : any >1 : 1 > : ^ } diff --git a/tests/baselines/reference/types.asyncGenerators.es2018.2.errors.txt b/tests/baselines/reference/types.asyncGenerators.es2018.2.errors.txt index 1efc4e535a3a5..4aa4491e4234b 100644 --- a/tests/baselines/reference/types.asyncGenerators.es2018.2.errors.txt +++ b/tests/baselines/reference/types.asyncGenerators.es2018.2.errors.txt @@ -1,71 +1,71 @@ types.asyncGenerators.es2018.2.ts(2,12): error TS2504: Type '{}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. types.asyncGenerators.es2018.2.ts(8,12): error TS2504: Type 'Promise<number[]>' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. -types.asyncGenerators.es2018.2.ts(10,7): error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterableIterator<number>'. - Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterableIterator<number>' are incompatible. +types.asyncGenerators.es2018.2.ts(10,7): error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterableIterator<number>'. + Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterableIterator<number>' are incompatible. The types returned by 'next(...)' are incompatible between these types. Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorYieldResult<number>'. Type 'string' is not assignable to type 'number'. -types.asyncGenerators.es2018.2.ts(13,7): error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterableIterator<number>'. - Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterableIterator<number>' are incompatible. +types.asyncGenerators.es2018.2.ts(13,7): error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterableIterator<number>'. + Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterableIterator<number>' are incompatible. The types returned by 'next(...)' are incompatible between these types. Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorYieldResult<number>'. Type 'string' is not assignable to type 'number'. -types.asyncGenerators.es2018.2.ts(16,7): error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterableIterator<number>'. - Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterableIterator<number>' are incompatible. +types.asyncGenerators.es2018.2.ts(16,7): error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterableIterator<number>'. + Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterableIterator<number>' are incompatible. The types returned by 'next(...)' are incompatible between these types. Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorYieldResult<number>'. Type 'string' is not assignable to type 'number'. -types.asyncGenerators.es2018.2.ts(19,7): error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterable<number>'. - Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterable<number>' are incompatible. +types.asyncGenerators.es2018.2.ts(19,7): error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterable<number>'. + Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterable<number>' are incompatible. The types returned by '[Symbol.asyncIterator]().next(...)' are incompatible between these types. Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorYieldResult<number>'. Type 'string' is not assignable to type 'number'. -types.asyncGenerators.es2018.2.ts(22,7): error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterable<number>'. - Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterable<number>' are incompatible. +types.asyncGenerators.es2018.2.ts(22,7): error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterable<number>'. + Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterable<number>' are incompatible. The types returned by '[Symbol.asyncIterator]().next(...)' are incompatible between these types. Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorYieldResult<number>'. Type 'string' is not assignable to type 'number'. -types.asyncGenerators.es2018.2.ts(25,7): error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterable<number>'. - Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterable<number>' are incompatible. +types.asyncGenerators.es2018.2.ts(25,7): error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterable<number>'. + Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterable<number>' are incompatible. The types returned by '[Symbol.asyncIterator]().next(...)' are incompatible between these types. Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorYieldResult<number>'. Type 'string' is not assignable to type 'number'. -types.asyncGenerators.es2018.2.ts(28,7): error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterator<number, any, undefined>'. - Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterator<number, any, undefined>' are incompatible. +types.asyncGenerators.es2018.2.ts(28,7): error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterator<number, any, any>'. + Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterator<number, any, any>' are incompatible. The types returned by 'next(...)' are incompatible between these types. Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorYieldResult<number>'. Type 'string' is not assignable to type 'number'. -types.asyncGenerators.es2018.2.ts(31,7): error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterator<number, any, undefined>'. - Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterator<number, any, undefined>' are incompatible. +types.asyncGenerators.es2018.2.ts(31,7): error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterator<number, any, any>'. + Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterator<number, any, any>' are incompatible. The types returned by 'next(...)' are incompatible between these types. Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorResult<number, any>'. Type 'IteratorYieldResult<string>' is not assignable to type 'IteratorYieldResult<number>'. Type 'string' is not assignable to type 'number'. -types.asyncGenerators.es2018.2.ts(34,7): error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterator<number, any, undefined>'. - Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterator<number, any, undefined>' are incompatible. +types.asyncGenerators.es2018.2.ts(34,7): error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterator<number, any, any>'. + Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterator<number, any, any>' are incompatible. The types returned by 'next(...)' are incompatible between these types. Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. @@ -81,9 +81,9 @@ types.asyncGenerators.es2018.2.ts(53,12): error TS2322: Type 'string' is not ass types.asyncGenerators.es2018.2.ts(56,11): error TS2322: Type 'string' is not assignable to type 'number'. types.asyncGenerators.es2018.2.ts(59,12): error TS2322: Type 'string' is not assignable to type 'number'. types.asyncGenerators.es2018.2.ts(62,12): error TS2322: Type 'string' is not assignable to type 'number'. -types.asyncGenerators.es2018.2.ts(64,42): error TS2741: Property '[Symbol.iterator]' is missing in type 'AsyncGenerator<number, any, undefined>' but required in type 'IterableIterator<number>'. +types.asyncGenerators.es2018.2.ts(64,42): error TS2741: Property '[Symbol.iterator]' is missing in type 'AsyncGenerator<number, any, any>' but required in type 'IterableIterator<number>'. types.asyncGenerators.es2018.2.ts(67,42): error TS2741: Property '[Symbol.iterator]' is missing in type 'AsyncGenerator<any, any, unknown>' but required in type 'Iterable<number>'. -types.asyncGenerators.es2018.2.ts(70,42): error TS2322: Type 'AsyncGenerator<number, any, undefined>' is not assignable to type 'Iterator<number, any, undefined>'. +types.asyncGenerators.es2018.2.ts(70,42): error TS2322: Type 'AsyncGenerator<number, any, any>' is not assignable to type 'Iterator<number, any, any>'. The types returned by 'next(...)' are incompatible between these types. Type 'Promise<IteratorResult<number, any>>' is not assignable to type 'IteratorResult<number, any>'. types.asyncGenerators.es2018.2.ts(74,12): error TS2504: Type '{}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator. @@ -106,8 +106,8 @@ types.asyncGenerators.es2018.2.ts(74,12): error TS2504: Type '{}' must have a '[ } const assignability1: () => AsyncIterableIterator<number> = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterableIterator<number>'. -!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterableIterator<number>' are incompatible. +!!! error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterableIterator<number>'. +!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterableIterator<number>' are incompatible. !!! error TS2322: The types returned by 'next(...)' are incompatible between these types. !!! error TS2322: Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. !!! error TS2322: Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. @@ -118,8 +118,8 @@ types.asyncGenerators.es2018.2.ts(74,12): error TS2504: Type '{}' must have a '[ }; const assignability2: () => AsyncIterableIterator<number> = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterableIterator<number>'. -!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterableIterator<number>' are incompatible. +!!! error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterableIterator<number>'. +!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterableIterator<number>' are incompatible. !!! error TS2322: The types returned by 'next(...)' are incompatible between these types. !!! error TS2322: Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. !!! error TS2322: Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. @@ -130,8 +130,8 @@ types.asyncGenerators.es2018.2.ts(74,12): error TS2504: Type '{}' must have a '[ }; const assignability3: () => AsyncIterableIterator<number> = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterableIterator<number>'. -!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterableIterator<number>' are incompatible. +!!! error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterableIterator<number>'. +!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterableIterator<number>' are incompatible. !!! error TS2322: The types returned by 'next(...)' are incompatible between these types. !!! error TS2322: Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. !!! error TS2322: Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. @@ -142,8 +142,8 @@ types.asyncGenerators.es2018.2.ts(74,12): error TS2504: Type '{}' must have a '[ }; const assignability4: () => AsyncIterable<number> = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterable<number>'. -!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterable<number>' are incompatible. +!!! error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterable<number>'. +!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterable<number>' are incompatible. !!! error TS2322: The types returned by '[Symbol.asyncIterator]().next(...)' are incompatible between these types. !!! error TS2322: Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. !!! error TS2322: Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. @@ -154,8 +154,8 @@ types.asyncGenerators.es2018.2.ts(74,12): error TS2504: Type '{}' must have a '[ }; const assignability5: () => AsyncIterable<number> = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterable<number>'. -!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterable<number>' are incompatible. +!!! error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterable<number>'. +!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterable<number>' are incompatible. !!! error TS2322: The types returned by '[Symbol.asyncIterator]().next(...)' are incompatible between these types. !!! error TS2322: Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. !!! error TS2322: Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. @@ -166,8 +166,8 @@ types.asyncGenerators.es2018.2.ts(74,12): error TS2504: Type '{}' must have a '[ }; const assignability6: () => AsyncIterable<number> = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterable<number>'. -!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterable<number>' are incompatible. +!!! error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterable<number>'. +!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterable<number>' are incompatible. !!! error TS2322: The types returned by '[Symbol.asyncIterator]().next(...)' are incompatible between these types. !!! error TS2322: Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. !!! error TS2322: Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. @@ -178,8 +178,8 @@ types.asyncGenerators.es2018.2.ts(74,12): error TS2504: Type '{}' must have a '[ }; const assignability7: () => AsyncIterator<number> = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterator<number, any, undefined>'. -!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterator<number, any, undefined>' are incompatible. +!!! error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterator<number, any, any>'. +!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterator<number, any, any>' are incompatible. !!! error TS2322: The types returned by 'next(...)' are incompatible between these types. !!! error TS2322: Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. !!! error TS2322: Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. @@ -190,8 +190,8 @@ types.asyncGenerators.es2018.2.ts(74,12): error TS2504: Type '{}' must have a '[ }; const assignability8: () => AsyncIterator<number> = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterator<number, any, undefined>'. -!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterator<number, any, undefined>' are incompatible. +!!! error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterator<number, any, any>'. +!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterator<number, any, any>' are incompatible. !!! error TS2322: The types returned by 'next(...)' are incompatible between these types. !!! error TS2322: Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. !!! error TS2322: Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. @@ -202,8 +202,8 @@ types.asyncGenerators.es2018.2.ts(74,12): error TS2504: Type '{}' must have a '[ }; const assignability9: () => AsyncIterator<number> = async function * () { ~~~~~~~~~~~~~~ -!!! error TS2322: Type '() => AsyncGenerator<string, void, undefined>' is not assignable to type '() => AsyncIterator<number, any, undefined>'. -!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, undefined>' and 'AsyncIterator<number, any, undefined>' are incompatible. +!!! error TS2322: Type '() => AsyncGenerator<string, void, any>' is not assignable to type '() => AsyncIterator<number, any, any>'. +!!! error TS2322: Call signature return types 'AsyncGenerator<string, void, any>' and 'AsyncIterator<number, any, any>' are incompatible. !!! error TS2322: The types returned by 'next(...)' are incompatible between these types. !!! error TS2322: Type 'Promise<IteratorResult<string, void>>' is not assignable to type 'Promise<IteratorResult<number, any>>'. !!! error TS2322: Type 'IteratorResult<string, void>' is not assignable to type 'IteratorResult<number, any>'. @@ -259,7 +259,7 @@ types.asyncGenerators.es2018.2.ts(74,12): error TS2504: Type '{}' must have a '[ } async function * explicitReturnType10(): IterableIterator<number> { ~~~~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2741: Property '[Symbol.iterator]' is missing in type 'AsyncGenerator<number, any, undefined>' but required in type 'IterableIterator<number>'. +!!! error TS2741: Property '[Symbol.iterator]' is missing in type 'AsyncGenerator<number, any, any>' but required in type 'IterableIterator<number>'. !!! related TS2728 lib.es2015.iterable.d.ts:--:--: '[Symbol.iterator]' is declared here. yield 1; } @@ -271,7 +271,7 @@ types.asyncGenerators.es2018.2.ts(74,12): error TS2504: Type '{}' must have a '[ } async function * explicitReturnType12(): Iterator<number> { ~~~~~~~~~~~~~~~~ -!!! error TS2322: Type 'AsyncGenerator<number, any, undefined>' is not assignable to type 'Iterator<number, any, undefined>'. +!!! error TS2322: Type 'AsyncGenerator<number, any, any>' is not assignable to type 'Iterator<number, any, any>'. !!! error TS2322: The types returned by 'next(...)' are incompatible between these types. !!! error TS2322: Type 'Promise<IteratorResult<number, any>>' is not assignable to type 'IteratorResult<number, any>'. yield 1; diff --git a/tests/baselines/reference/types.asyncGenerators.es2018.2.types b/tests/baselines/reference/types.asyncGenerators.es2018.2.types index 41275777ea664..1f65af986e913 100644 --- a/tests/baselines/reference/types.asyncGenerators.es2018.2.types +++ b/tests/baselines/reference/types.asyncGenerators.es2018.2.types @@ -48,12 +48,12 @@ async function * inferReturnType3() { const assignability1: () => AsyncIterableIterator<number> = async function * () { >assignability1 : () => AsyncIterableIterator<number> > : ^^^^^^ ->async function * () { yield "a";} : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield "a";} : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield "a"; ->yield "a" : undefined -> : ^^^^^^^^^ +>yield "a" : any +> : ^^^ >"a" : "a" > : ^^^ @@ -61,8 +61,8 @@ const assignability1: () => AsyncIterableIterator<number> = async function * () const assignability2: () => AsyncIterableIterator<number> = async function * () { >assignability2 : () => AsyncIterableIterator<number> > : ^^^^^^ ->async function * () { yield* ["a", "b"];} : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* ["a", "b"];} : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* ["a", "b"]; >yield* ["a", "b"] : any @@ -78,20 +78,20 @@ const assignability2: () => AsyncIterableIterator<number> = async function * () const assignability3: () => AsyncIterableIterator<number> = async function * () { >assignability3 : () => AsyncIterableIterator<number> > : ^^^^^^ ->async function * () { yield* (async function * () { yield "a"; })();} : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* (async function * () { yield "a"; })();} : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* (async function * () { yield "a"; })(); >yield* (async function * () { yield "a"; })() : void > : ^^^^ ->(async function * () { yield "a"; })() : AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->(async function * () { yield "a"; }) : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { yield "a"; } : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->yield "a" : undefined -> : ^^^^^^^^^ +>(async function * () { yield "a"; })() : AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(async function * () { yield "a"; }) : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield "a"; } : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield "a" : any +> : ^^^ >"a" : "a" > : ^^^ @@ -99,12 +99,12 @@ const assignability3: () => AsyncIterableIterator<number> = async function * () const assignability4: () => AsyncIterable<number> = async function * () { >assignability4 : () => AsyncIterable<number> > : ^^^^^^ ->async function * () { yield "a";} : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield "a";} : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield "a"; ->yield "a" : undefined -> : ^^^^^^^^^ +>yield "a" : any +> : ^^^ >"a" : "a" > : ^^^ @@ -112,8 +112,8 @@ const assignability4: () => AsyncIterable<number> = async function * () { const assignability5: () => AsyncIterable<number> = async function * () { >assignability5 : () => AsyncIterable<number> > : ^^^^^^ ->async function * () { yield* ["a", "b"];} : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* ["a", "b"];} : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* ["a", "b"]; >yield* ["a", "b"] : any @@ -129,20 +129,20 @@ const assignability5: () => AsyncIterable<number> = async function * () { const assignability6: () => AsyncIterable<number> = async function * () { >assignability6 : () => AsyncIterable<number> > : ^^^^^^ ->async function * () { yield* (async function * () { yield "a"; })();} : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* (async function * () { yield "a"; })();} : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* (async function * () { yield "a"; })(); >yield* (async function * () { yield "a"; })() : void > : ^^^^ ->(async function * () { yield "a"; })() : AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->(async function * () { yield "a"; }) : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { yield "a"; } : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->yield "a" : undefined -> : ^^^^^^^^^ +>(async function * () { yield "a"; })() : AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(async function * () { yield "a"; }) : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield "a"; } : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield "a" : any +> : ^^^ >"a" : "a" > : ^^^ @@ -150,12 +150,12 @@ const assignability6: () => AsyncIterable<number> = async function * () { const assignability7: () => AsyncIterator<number> = async function * () { >assignability7 : () => AsyncIterator<number> > : ^^^^^^ ->async function * () { yield "a";} : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield "a";} : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield "a"; ->yield "a" : undefined -> : ^^^^^^^^^ +>yield "a" : any +> : ^^^ >"a" : "a" > : ^^^ @@ -163,8 +163,8 @@ const assignability7: () => AsyncIterator<number> = async function * () { const assignability8: () => AsyncIterator<number> = async function * () { >assignability8 : () => AsyncIterator<number> > : ^^^^^^ ->async function * () { yield* ["a", "b"];} : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* ["a", "b"];} : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* ["a", "b"]; >yield* ["a", "b"] : any @@ -180,20 +180,20 @@ const assignability8: () => AsyncIterator<number> = async function * () { const assignability9: () => AsyncIterator<number> = async function * () { >assignability9 : () => AsyncIterator<number> > : ^^^^^^ ->async function * () { yield* (async function * () { yield "a"; })();} : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield* (async function * () { yield "a"; })();} : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield* (async function * () { yield "a"; })(); >yield* (async function * () { yield "a"; })() : void > : ^^^^ ->(async function * () { yield "a"; })() : AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->(async function * () { yield "a"; }) : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { yield "a"; } : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->yield "a" : undefined -> : ^^^^^^^^^ +>(async function * () { yield "a"; })() : AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(async function * () { yield "a"; }) : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield "a"; } : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield "a" : any +> : ^^^ >"a" : "a" > : ^^^ @@ -203,8 +203,8 @@ async function * explicitReturnType1(): AsyncIterableIterator<number> { > : ^^^^^^ yield "a"; ->yield "a" : undefined -> : ^^^^^^^^^ +>yield "a" : any +> : ^^^ >"a" : "a" > : ^^^ } @@ -229,14 +229,14 @@ async function * explicitReturnType3(): AsyncIterableIterator<number> { yield* (async function * () { yield "a"; })(); >yield* (async function * () { yield "a"; })() : void > : ^^^^ ->(async function * () { yield "a"; })() : AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->(async function * () { yield "a"; }) : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { yield "a"; } : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->yield "a" : undefined -> : ^^^^^^^^^ +>(async function * () { yield "a"; })() : AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(async function * () { yield "a"; }) : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield "a"; } : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield "a" : any +> : ^^^ >"a" : "a" > : ^^^ } @@ -245,8 +245,8 @@ async function * explicitReturnType4(): AsyncIterable<number> { > : ^^^^^^ yield "a"; ->yield "a" : undefined -> : ^^^^^^^^^ +>yield "a" : any +> : ^^^ >"a" : "a" > : ^^^ } @@ -271,14 +271,14 @@ async function * explicitReturnType6(): AsyncIterable<number> { yield* (async function * () { yield "a"; })(); >yield* (async function * () { yield "a"; })() : void > : ^^^^ ->(async function * () { yield "a"; })() : AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->(async function * () { yield "a"; }) : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { yield "a"; } : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->yield "a" : undefined -> : ^^^^^^^^^ +>(async function * () { yield "a"; })() : AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(async function * () { yield "a"; }) : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield "a"; } : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield "a" : any +> : ^^^ >"a" : "a" > : ^^^ } @@ -287,8 +287,8 @@ async function * explicitReturnType7(): AsyncIterator<number> { > : ^^^^^^ yield "a"; ->yield "a" : undefined -> : ^^^^^^^^^ +>yield "a" : any +> : ^^^ >"a" : "a" > : ^^^ } @@ -313,14 +313,14 @@ async function * explicitReturnType9(): AsyncIterator<number> { yield* (async function * () { yield "a"; })(); >yield* (async function * () { yield "a"; })() : void > : ^^^^ ->(async function * () { yield "a"; })() : AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->(async function * () { yield "a"; }) : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->async function * () { yield "a"; } : () => AsyncGenerator<string, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ->yield "a" : undefined -> : ^^^^^^^^^ +>(async function * () { yield "a"; })() : AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>(async function * () { yield "a"; }) : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>async function * () { yield "a"; } : () => AsyncGenerator<string, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>yield "a" : any +> : ^^^ >"a" : "a" > : ^^^ } @@ -329,8 +329,8 @@ async function * explicitReturnType10(): IterableIterator<number> { > : ^^^^^^ yield 1; ->yield 1 : undefined -> : ^^^^^^^^^ +>yield 1 : any +> : ^^^ >1 : 1 > : ^ } @@ -349,8 +349,8 @@ async function * explicitReturnType12(): Iterator<number> { > : ^^^^^^ yield 1; ->yield 1 : undefined -> : ^^^^^^^^^ +>yield 1 : any +> : ^^^ >1 : 1 > : ^ } diff --git a/tests/baselines/reference/types.forAwait.es2018.2.errors.txt b/tests/baselines/reference/types.forAwait.es2018.2.errors.txt index 77422b5d728da..b0635928d4860 100644 --- a/tests/baselines/reference/types.forAwait.es2018.2.errors.txt +++ b/tests/baselines/reference/types.forAwait.es2018.2.errors.txt @@ -31,10 +31,12 @@ types.forAwait.es2018.2.ts(16,15): error TS2488: Type 'AsyncIterable<number>' mu for (const x of asyncIterable) { ~~~~~~~~~~~~~ !!! error TS2488: Type 'AsyncIterable<number>' must have a '[Symbol.iterator]()' method that returns an iterator. +!!! related TS2773 types.forAwait.es2018.2.ts:14:21: Did you forget to use 'await'? } for (y of asyncIterable) { ~~~~~~~~~~~~~ !!! error TS2488: Type 'AsyncIterable<number>' must have a '[Symbol.iterator]()' method that returns an iterator. +!!! related TS2773 types.forAwait.es2018.2.ts:16:15: Did you forget to use 'await'? } } \ No newline at end of file diff --git a/tests/baselines/reference/uniqueSymbols.types b/tests/baselines/reference/uniqueSymbols.types index 1ee2fbcaff4e2..c9aa5b7952203 100644 --- a/tests/baselines/reference/uniqueSymbols.types +++ b/tests/baselines/reference/uniqueSymbols.types @@ -195,8 +195,7 @@ function* genFuncYieldConstCallWithTypeQuery(): IterableIterator<typeof constCal > : ^^^^^^ >constCall : unique symbol > : ^^^^^^^^^^^^^ ->yield constCall : undefined -> : ^^^^^^^^^ +>yield constCall : any >constCall : unique symbol > : ^^^^^^^^^^^^^ @@ -1304,8 +1303,8 @@ interface Context { const o3: Context = { >o3 : Context > : ^^^^^^^ ->{ method1() { return s; // return type should not widen due to contextual type }, async method2() { return s; // return type should not widen due to contextual type }, async * method3() { yield s; // yield type should not widen due to contextual type }, * method4() { yield s; // yield type should not widen due to contextual type }, method5(p = s) { // parameter should not widen due to contextual type return p; },} : { method1(): unique symbol; method2(): Promise<unique symbol>; method3(): AsyncGenerator<unique symbol, void, undefined>; method4(): Generator<unique symbol, void, undefined>; method5(p?: unique symbol): unique symbol; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>{ method1() { return s; // return type should not widen due to contextual type }, async method2() { return s; // return type should not widen due to contextual type }, async * method3() { yield s; // yield type should not widen due to contextual type }, * method4() { yield s; // yield type should not widen due to contextual type }, method5(p = s) { // parameter should not widen due to contextual type return p; },} : { method1(): unique symbol; method2(): Promise<unique symbol>; method3(): AsyncGenerator<unique symbol, void, any>; method4(): Generator<unique symbol, void, any>; method5(p?: unique symbol): unique symbol; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method1() { >method1 : () => unique symbol @@ -1326,23 +1325,21 @@ const o3: Context = { }, async * method3() { ->method3 : () => AsyncGenerator<unique symbol, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>method3 : () => AsyncGenerator<unique symbol, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield s; // yield type should not widen due to contextual type ->yield s : undefined -> : ^^^^^^^^^ +>yield s : any >s : unique symbol > : ^^^^^^^^^^^^^ }, * method4() { ->method4 : () => Generator<unique symbol, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>method4 : () => Generator<unique symbol, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield s; // yield type should not widen due to contextual type ->yield s : undefined -> : ^^^^^^^^^ +>yield s : any >s : unique symbol > : ^^^^^^^^^^^^^ diff --git a/tests/baselines/reference/uniqueSymbolsDeclarations.types b/tests/baselines/reference/uniqueSymbolsDeclarations.types index c8bd68e1b3b63..fadf33c1b43cf 100644 --- a/tests/baselines/reference/uniqueSymbolsDeclarations.types +++ b/tests/baselines/reference/uniqueSymbolsDeclarations.types @@ -186,8 +186,7 @@ function* genFuncYieldConstCallWithTypeQuery(): IterableIterator<typeof constCal > : ^^^^^^ >constCall : unique symbol > : ^^^^^^^^^^^^^ ->yield constCall : undefined -> : ^^^^^^^^^ +>yield constCall : any >constCall : unique symbol > : ^^^^^^^^^^^^^ @@ -1295,8 +1294,8 @@ interface Context { const o4: Context = { >o4 : Context > : ^^^^^^^ ->{ method1() { return s; // return type should not widen due to contextual type }, async method2() { return s; // return type should not widen due to contextual type }, async * method3() { yield s; // yield type should not widen due to contextual type }, * method4() { yield s; // yield type should not widen due to contextual type }, method5(p = s) { // parameter should not widen due to contextual type return p; }} : { method1(): unique symbol; method2(): Promise<unique symbol>; method3(): AsyncGenerator<unique symbol, void, undefined>; method4(): Generator<unique symbol, void, undefined>; method5(p?: unique symbol): unique symbol; } -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>{ method1() { return s; // return type should not widen due to contextual type }, async method2() { return s; // return type should not widen due to contextual type }, async * method3() { yield s; // yield type should not widen due to contextual type }, * method4() { yield s; // yield type should not widen due to contextual type }, method5(p = s) { // parameter should not widen due to contextual type return p; }} : { method1(): unique symbol; method2(): Promise<unique symbol>; method3(): AsyncGenerator<unique symbol, void, any>; method4(): Generator<unique symbol, void, any>; method5(p?: unique symbol): unique symbol; } +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method1() { >method1 : () => unique symbol @@ -1317,23 +1316,21 @@ const o4: Context = { }, async * method3() { ->method3 : () => AsyncGenerator<unique symbol, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>method3 : () => AsyncGenerator<unique symbol, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield s; // yield type should not widen due to contextual type ->yield s : undefined -> : ^^^^^^^^^ +>yield s : any >s : unique symbol > : ^^^^^^^^^^^^^ }, * method4() { ->method4 : () => Generator<unique symbol, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>method4 : () => Generator<unique symbol, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ yield s; // yield type should not widen due to contextual type ->yield s : undefined -> : ^^^^^^^^^ +>yield s : any >s : unique symbol > : ^^^^^^^^^^^^^ diff --git a/tests/baselines/reference/yieldExpression1.types b/tests/baselines/reference/yieldExpression1.types index 38715c1dd92a9..1544635e065a8 100644 --- a/tests/baselines/reference/yieldExpression1.types +++ b/tests/baselines/reference/yieldExpression1.types @@ -21,12 +21,12 @@ function* b(): IterableIterator<number> { > : ^^^^^^ yield; ->yield : undefined -> : ^^^^^^^^^ +>yield : any +> : ^^^ yield 0; ->yield 0 : undefined -> : ^^^^^^^^^ +>yield 0 : any +> : ^^^ >0 : 0 > : ^ } diff --git a/tests/baselines/reference/yieldExpressionInnerCommentEmit.types b/tests/baselines/reference/yieldExpressionInnerCommentEmit.types index f6ea97325fd61..bba612bd5c756 100644 --- a/tests/baselines/reference/yieldExpressionInnerCommentEmit.types +++ b/tests/baselines/reference/yieldExpressionInnerCommentEmit.types @@ -2,8 +2,8 @@ === yieldExpressionInnerCommentEmit.ts === function * foo2() { ->foo2 : () => Generator<number, void, undefined> -> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +>foo2 : () => Generator<number, void, any> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /*comment1*/ yield 1; >yield 1 : any diff --git a/tests/cases/compiler/customAsyncIterator.ts b/tests/cases/compiler/customAsyncIterator.ts index 3f80b4ef2a96c..c5c6c5f9cc5fe 100644 --- a/tests/cases/compiler/customAsyncIterator.ts +++ b/tests/cases/compiler/customAsyncIterator.ts @@ -2,7 +2,7 @@ // @useDefineForClassFields: false // GH: https://github.com/microsoft/TypeScript/issues/33239 -class ConstantIterator<T> implements AsyncIterator<T, undefined, T | undefined> { +class ConstantIterator<T> implements AsyncIterator<T, void, T | undefined> { constructor(private constant: T) { } async next(value?: T): Promise<IteratorResult<T>> { diff --git a/tests/cases/compiler/discriminateWithOptionalProperty2.ts b/tests/cases/compiler/discriminateWithOptionalProperty2.ts index d740bcd7ce70d..a8b36cb497489 100644 --- a/tests/cases/compiler/discriminateWithOptionalProperty2.ts +++ b/tests/cases/compiler/discriminateWithOptionalProperty2.ts @@ -8,7 +8,7 @@ type PromiseOrValue<T> = Promise<T> | T; function mapAsyncIterable<T, U, R = undefined>( - iterable: AsyncGenerator<T, R, void> | AsyncIterable<T>, + iterable: AsyncGenerator<T, R, undefined> | AsyncIterable<T, R, undefined>, callback: (value: T) => PromiseOrValue<U>, ): AsyncGenerator<U, R, void> { const iterator = iterable[Symbol.asyncIterator](); diff --git a/tests/cases/compiler/isolatedDeclarationsStrictBuiltinIteratorReturn.ts b/tests/cases/compiler/isolatedDeclarationsStrictBuiltinIteratorReturn.ts new file mode 100644 index 0000000000000..8da68083d483a --- /dev/null +++ b/tests/cases/compiler/isolatedDeclarationsStrictBuiltinIteratorReturn.ts @@ -0,0 +1,53 @@ +// @isolatedDeclarations: * +// @strictBuiltinIteratorReturn: * +// @declaration: true +// @target: esnext +// @noTypesAndSymbols: true + +declare let x1: Iterable<number>; +declare let x2: Iterable<number, any>; +declare let x3: Iterable<number, any, any>; +declare let x4: Iterable<number, undefined>; +declare let x5: Iterable<number, undefined, any>; +declare let x6: Iterable<number, BuiltinIteratorReturn>; +declare let x7: Iterable<number, BuiltinIteratorReturn, any>; + +declare let x8: IterableIterator<number>; +declare let x9: IterableIterator<number, any>; +declare let x10: IterableIterator<number, any, any>; +declare let x11: IterableIterator<number, undefined>; +declare let x12: IterableIterator<number, undefined, any>; +declare let x13: IterableIterator<number, BuiltinIteratorReturn>; +declare let x14: IterableIterator<number, BuiltinIteratorReturn, any>; + +declare function f1(): Iterable<number>; +declare function f2(): Iterable<number, any>; +declare function f3(): Iterable<number, any, any>; +declare function f4(): Iterable<number, undefined>; +declare function f5(): Iterable<number, undefined, any>; +declare function f6(): Iterable<number, BuiltinIteratorReturn>; +declare function f7(): Iterable<number, BuiltinIteratorReturn, any>; + +declare function f8(): IterableIterator<number>; +declare function f9(): IterableIterator<number, any>; +declare function f10(): IterableIterator<number, any, any>; +declare function f11(): IterableIterator<number, undefined>; +declare function f12(): IterableIterator<number, undefined, any>; +declare function f13(): IterableIterator<number, BuiltinIteratorReturn>; +declare function f14(): IterableIterator<number, BuiltinIteratorReturn, any>; + +const a1 = (): Iterable<number> => null!; +const a2 = (): Iterable<number, any> => null!; +const a3 = (): Iterable<number, any, any> => null!; +const a4 = (): Iterable<number, undefined> => null!; +const a5 = (): Iterable<number, undefined, any> => null!; +const a6 = (): Iterable<number, BuiltinIteratorReturn> => null!; +const a7 = (): Iterable<number, BuiltinIteratorReturn, any> => null!; + +const a8 = (): IterableIterator<number> => null!; +const a9 = (): IterableIterator<number, any> => null!; +const a10 = (): IterableIterator<number, any, any> => null!; +const a11 = (): IterableIterator<number, undefined> => null!; +const a12 = (): IterableIterator<number, undefined, any> => null!; +const a13 = (): IterableIterator<number, BuiltinIteratorReturn> => null!; +const a14 = (): IterableIterator<number, BuiltinIteratorReturn, any> => null!; \ No newline at end of file diff --git a/tests/cases/compiler/iterableTReturnTNext.ts b/tests/cases/compiler/iterableTReturnTNext.ts new file mode 100644 index 0000000000000..9e24354b88d66 --- /dev/null +++ b/tests/cases/compiler/iterableTReturnTNext.ts @@ -0,0 +1,50 @@ +// @target: esnext +// @strict: true +// @strictBuiltinIteratorReturn: * + +declare const map: Map<string, number>; +declare const set: Set<number>; + +// based on: +// - https://github.com/apollographql/apollo-client/blob/8740f198805a99e01136617c4055d611b92cc231/src/react/hooks/__tests__/useMutation.test.tsx#L2328 +// - https://github.com/continuedev/continue/blob/046bca088a833f8b3620412ff64e4b6f41fbb959/extensions/vscode/src/autocomplete/lsp.ts#L60 +const r1: number = map.values().next().value; // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` + +// based on: https://github.com/gcanti/fp-ts/blob/89a772e95e414acee679f42f56527606f7b61f30/src/Map.ts#L246 +interface Next<A> { + readonly done?: boolean + readonly value: A +} +const r2: Next<number> = map.values().next(); // error when strictBuiltinIteratorReturn is true as result is potentially `{ done: true, value: undefined }` + +// based on: https://github.com/graphql/graphql-js/blob/e15c3ec4dc21d9fd1df34fe9798cadf3bf02c6ea/src/execution/__tests__/mapAsyncIterable-test.ts#L175 +async function* source() { yield 1; yield 2; yield 3; } +const doubles = source(); +doubles.return(); + +// based on: https://github.com/backstage/backstage/blob/85d9346ef11c1c20e4405102b4f5d93afb1292c1/packages/core-app-api/src/routing/RouteTracker.tsx#L62 +const r3: number | undefined = set.values().next().value; + +// based on: https://github.com/microsoft/TypeScript/blob/15f67e0b482faf9f6a3ab9965f3c11196bf3e99b/src/harness/compilerImpl.ts#L77 +class MyMap implements Map<string, number> { + declare private _keys: string[]; + declare private _values: number[]; + declare size: number; + declare [Symbol.toStringTag]: string; + + clear(): void { } + delete(key: string): boolean { return false; } + forEach(callbackfn: (value: number, key: string, map: Map<string, number>) => void, thisArg?: any): void { } + get(key: string): number | undefined { return undefined; } + has(key: string): boolean { return false; } + set(key: string, value: number): this { return this; } + entries(): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } + keys(): IterableIterator<string, BuiltinIteratorReturn> { throw new Error("Method not implemented."); } + + [Symbol.iterator](): IterableIterator<[string, number], BuiltinIteratorReturn> { throw new Error("Method not implemented."); } + + // error when strictBuiltinIteratorReturn is true because values() has implicit `void` return, which isn't assignable to `undefined` + * values() { + yield* this._values; + } +} diff --git a/tests/cases/compiler/jsFileCompilationWithMapFileAsJsWithOutDir.ts b/tests/cases/compiler/jsFileCompilationWithMapFileAsJsWithOutDir.ts index 9e39ae274b4fa..0f860626676c0 100644 --- a/tests/cases/compiler/jsFileCompilationWithMapFileAsJsWithOutDir.ts +++ b/tests/cases/compiler/jsFileCompilationWithMapFileAsJsWithOutDir.ts @@ -1,4 +1,4 @@ -// @allowJs: true,map +// @allowJs: true // @sourcemap: true // @outdir: out diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck11.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck11.ts index e77ec3d911c66..14d90f47a8658 100644 --- a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck11.ts +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck11.ts @@ -1,4 +1,4 @@ //@target: ES6 -function* g(): IterableIterator<number> { +function* g(): IterableIterator<number, number> { return 0; } \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck12.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck12.ts index 6f602a239819c..fa45b8c39ba7f 100644 --- a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck12.ts +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck12.ts @@ -1,4 +1,4 @@ //@target: ES6 -function* g(): IterableIterator<number> { +function* g(): IterableIterator<number, string> { return ""; } \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck13.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck13.ts index a21d9e8ab63e7..d9cce1a5eafc5 100644 --- a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck13.ts +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck13.ts @@ -1,5 +1,5 @@ //@target: ES6 -function* g(): IterableIterator<number> { +function* g(): IterableIterator<number, string> { yield 0; return ""; } \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck26.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck26.ts index 334d21e38331c..f37e13eddd910 100644 --- a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck26.ts +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck26.ts @@ -1,5 +1,5 @@ //@target: ES6 -function* g(): IterableIterator<(x: string) => number> { +function* g(): IterableIterator<(x: string) => number, (x: string) => number> { yield x => x.length; yield *[x => x.length]; return x => x.length; diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck62.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck62.ts index 2f30fe9d90257..ee85d45065369 100644 --- a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck62.ts +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck62.ts @@ -6,7 +6,7 @@ export interface StrategicState { lastStrategyApplied?: string; } -export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>): (a: T) => IterableIterator<T | undefined> { +export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>): (a: T) => IterableIterator<T | undefined, void> { return function*(state) { for (const next of gen(state)) { if (next) { @@ -18,7 +18,7 @@ export function strategy<T extends StrategicState>(stratName: string, gen: (a: T } export interface Strategy<T> { - (a: T): IterableIterator<T | undefined>; + (a: T): IterableIterator<T | undefined, void>; } export interface State extends StrategicState { @@ -26,7 +26,7 @@ export interface State extends StrategicState { } export const Nothing1: Strategy<State> = strategy("Nothing", function*(state: State) { - return state; + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); export const Nothing2: Strategy<State> = strategy("Nothing", function*(state: State) { @@ -35,6 +35,6 @@ export const Nothing2: Strategy<State> = strategy("Nothing", function*(state: St export const Nothing3: Strategy<State> = strategy("Nothing", function* (state: State) { yield ; - return state; + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); \ No newline at end of file diff --git a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts index 58411e409b8ab..e50c40265ae0c 100644 --- a/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts +++ b/tests/cases/conformance/es6/yieldExpressions/generatorTypeCheck63.ts @@ -6,7 +6,7 @@ export interface StrategicState { lastStrategyApplied?: string; } -export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined>): (a: T) => IterableIterator<T | undefined> { +export function strategy<T extends StrategicState>(stratName: string, gen: (a: T) => IterableIterator<T | undefined, void>): (a: T) => IterableIterator<T | undefined, void> { return function*(state) { for (const next of gen(state)) { if (next) { @@ -18,7 +18,7 @@ export function strategy<T extends StrategicState>(stratName: string, gen: (a: T } export interface Strategy<T> { - (a: T): IterableIterator<T | undefined>; + (a: T): IterableIterator<T | undefined, void>; } export interface State extends StrategicState { @@ -26,18 +26,18 @@ export interface State extends StrategicState { } export const Nothing: Strategy<State> = strategy("Nothing", function* (state: State) { - yield 1; - return state; + yield 1; // number isn't a `State`, so this should error. + return state; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); export const Nothing1: Strategy<State> = strategy("Nothing", function* (state: State) { }); export const Nothing2: Strategy<State> = strategy("Nothing", function* (state: State) { - return 1; + return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); export const Nothing3: Strategy<State> = strategy("Nothing", function* (state: State) { yield state; - return 1; + return 1; // `return`/`TReturn` isn't supported by `strategy`, so this should error. }); \ No newline at end of file diff --git a/tests/cases/conformance/generators/generatorReturnTypeFallback.3.ts b/tests/cases/conformance/generators/generatorReturnTypeFallback.3.ts index 388d8bee7ee3b..da84940743db0 100644 --- a/tests/cases/conformance/generators/generatorReturnTypeFallback.3.ts +++ b/tests/cases/conformance/generators/generatorReturnTypeFallback.3.ts @@ -3,8 +3,6 @@ // @noemit: true // @strict: true -// Do not allow generators to fallback to IterableIterator while in strictNullChecks mode if they need a type for the sent value. -// NOTE: In non-strictNullChecks mode, `undefined` (the default sent value) is assignable to everything. function* f() { const x: string = yield 1; } \ No newline at end of file diff --git a/tests/cases/conformance/types/typeAliases/builtinIteratorReturn.ts b/tests/cases/conformance/types/typeAliases/builtinIteratorReturn.ts new file mode 100644 index 0000000000000..cc1852f5af8d3 --- /dev/null +++ b/tests/cases/conformance/types/typeAliases/builtinIteratorReturn.ts @@ -0,0 +1,32 @@ +// @target: esnext +// @noEmit: true +// @strictBuiltinIteratorReturn: * + +declare const array: number[]; +declare const map: Map<string, number>; +declare const set: Set<number>; + +const i0 = array[Symbol.iterator](); +const i1 = array.values(); +const i2 = array.keys(); +const i3 = array.entries(); +for (const x of array); + +const i4 = map[Symbol.iterator](); +const i5 = map.values(); +const i6 = map.keys(); +const i7 = map.entries(); +for (const x of map); + +const i8 = set[Symbol.iterator](); +const i9 = set.values(); +const i10 = set.keys(); +const i11 = set.entries(); +for (const x of set); + +declare const i12: IterableIterator<number, undefined>; +declare const i13: IterableIterator<number, any>; +declare const i14: IterableIterator<number, boolean>; +declare const i15: Iterable<number, undefined>; +declare const i16: Iterable<number, any>; +declare const i17: Iterable<number, boolean>; diff --git a/tests/cases/fourslash/codeFixAddMissingProperties22.ts b/tests/cases/fourslash/codeFixAddMissingProperties22.ts index 5bd5ec0705b80..7b54f5ef5933d 100644 --- a/tests/cases/fourslash/codeFixAddMissingProperties22.ts +++ b/tests/cases/fourslash/codeFixAddMissingProperties22.ts @@ -8,7 +8,7 @@ verify.codeFix({ description: ts.Diagnostics.Add_missing_properties.message, newFileContent: `const x: Iterable<number> = { - [Symbol.iterator]: function(): Iterator<number, any, undefined> { + [Symbol.iterator]: function(): Iterator<number, any, any> { throw new Error("Function not implemented."); } }`,