1// @target: esnext 2// @strict: true 3// @noEmit: true 4 5declare let _: any; 6declare const g1: Generator<number, void, string>; 7declare const g2: Generator<number, void, undefined>; 8declare const g3: Generator<number, void, boolean>; 9declare const g4: AsyncGenerator<number, void, string>; 10declare const g5: AsyncGenerator<number, void, undefined>; 11declare const g6: AsyncGenerator<number, void, boolean>; 12 13// spread iterable 14[...g1]; // error 15[...g2]; // ok 16 17// binding pattern over iterable 18let [x1] = g1; // error 19let [x2] = g2; // ok 20 21// binding rest pattern over iterable 22let [...y1] = g1; // error 23let [...y2] = g2; // ok 24 25// assignment pattern over iterable 26[_] = g1; // error 27[_] = g2; // ok 28 29// assignment rest pattern over iterable 30[..._] = g1; // error 31[..._] = g2; // ok 32 33// for-of over iterable 34for (_ of g1); // error 35for (_ of g2); // ok 36 37async function asyncfn() { 38 // for-await-of over iterable 39 for await (_ of g1); // error 40 for await (_ of g2); // ok 41 42 // for-await-of over asynciterable 43 for await (_ of g4); // error 44 for await (_ of g5); // ok 45} 46 47function* f1(): Generator<number, void, boolean> { 48 // yield* over iterable 49 yield* g1; // error 50 yield* g3; // ok 51} 52 53async function* f2(): AsyncGenerator<number, void, boolean> { 54 // yield* over iterable 55 yield* g1; // error 56 yield* g3; // ok 57 58 // yield* over asynciterable 59 yield* g4; // error 60 yield* g6; // ok 61} 62 63async function f3() { 64 const syncGenerator = function*() { 65 yield 1; 66 yield 2; 67 }; 68 69 const o = {[Symbol.asyncIterator]: syncGenerator}; 70 71 for await (const x of o) { 72 } 73} 74