// @target: esnext // @strictNullChecks: false // @noImplicitReturns: true // @noImplicitAny: true declare const iterableIterator: IterableIterator; declare const generator: Generator; declare const never: never; function* g000() { // Generator } // 'yield' iteration type inference function* g001() { // Generator yield; } function* g002() { // Generator yield 1; } function* g003() { // Generator // NOTE: In strict mode, `[]` produces the type `never[]`. // In non-strict mode, `[]` produces the type `undefined[]` which is implicitly any. yield* []; } function* g004() { // Generator yield* iterableIterator; } function* g005() { // Generator const x = yield* generator; } function* g006() { // Generator<1 | 2, void, unknown> yield 1; yield 2; } function* g007() { // Generator yield never; } // 'return' iteration type inference function* g102() { // Generator return 1; } function* g103() { // Generator if (Math.random()) return 1; return 2; } function* g104() { // Generator return never; } // 'next' iteration type inference function* g201() { // Generator let a: string = yield 1; } function* g202() { // Generator<1 | 2, void, never> let a: string = yield 1; let b: number = yield 2; } declare function f1(x: string): void; declare function f1(x: number): void; function* g203() { // Generator const x = f1(yield 1); } declare function f2(x: T): T; function* g204() { // Generator const x = f2(yield 1); } // mixed iteration types inference function* g301() { // Generator yield; return; } function* g302() { // Generator yield 1; return; } function* g303() { // Generator yield; return "a"; } function* g304() { // Generator yield 1; return "a"; } function* g305() { // Generator<1 | 2, "a" | "b", unknown> if (Math.random()) yield 1; yield 2; if (Math.random()) return "a"; return "b"; } function* g306() { // Generator const a: "hi" = yield 1; return true; } function* g307() { // Generator const a: T = yield 0; return a; } function* g308(x: T) { // Generator const a: T = yield x; return a; } function* g309(x: T, y: U) { // Generator const a: V = yield x; return y; } function* g310() { // Generator const [a = 1, b = 2] = yield; } function* g311() { // Generator yield* (function*() { const y: string = yield; })(); }