=== tests/cases/conformance/generators/generatorAssignability.ts === declare let _: any; >_ : any declare const g1: Generator; >g1 : Generator declare const g2: Generator; >g2 : Generator declare const g3: Generator; >g3 : Generator declare const g4: AsyncGenerator; >g4 : AsyncGenerator declare const g5: AsyncGenerator; >g5 : AsyncGenerator declare const g6: AsyncGenerator; >g6 : AsyncGenerator // spread iterable [...g1]; // error >[...g1] : number[] >...g1 : number >g1 : Generator [...g2]; // ok >[...g2] : number[] >...g2 : number >g2 : Generator // binding pattern over iterable let [x1] = g1; // error >x1 : number >g1 : Generator let [x2] = g2; // ok >x2 : number >g2 : Generator // binding rest pattern over iterable let [...y1] = g1; // error >y1 : number[] >g1 : Generator let [...y2] = g2; // ok >y2 : number[] >g2 : Generator // assignment pattern over iterable [_] = g1; // error >[_] = g1 : Generator >[_] : [any] >_ : any >g1 : Generator [_] = g2; // ok >[_] = g2 : Generator >[_] : [any] >_ : any >g2 : Generator // assignment rest pattern over iterable [..._] = g1; // error >[..._] = g1 : Generator >[..._] : any[] >..._ : any >_ : any >g1 : Generator [..._] = g2; // ok >[..._] = g2 : Generator >[..._] : any[] >..._ : any >_ : any >g2 : Generator // for-of over iterable for (_ of g1); // error >_ : any >g1 : Generator for (_ of g2); // ok >_ : any >g2 : Generator async function asyncfn() { >asyncfn : () => Promise // for-await-of over iterable for await (_ of g1); // error >_ : any >g1 : Generator for await (_ of g2); // ok >_ : any >g2 : Generator // for-await-of over asynciterable for await (_ of g4); // error >_ : any >g4 : AsyncGenerator for await (_ of g5); // ok >_ : any >g5 : AsyncGenerator } function* f1(): Generator { >f1 : () => Generator // yield* over iterable yield* g1; // error >yield* g1 : void >g1 : Generator yield* g3; // ok >yield* g3 : void >g3 : Generator } async function* f2(): AsyncGenerator { >f2 : () => AsyncGenerator // yield* over iterable yield* g1; // error >yield* g1 : void >g1 : Generator yield* g3; // ok >yield* g3 : void >g3 : Generator // yield* over asynciterable yield* g4; // error >yield* g4 : void >g4 : AsyncGenerator yield* g6; // ok >yield* g6 : void >g6 : AsyncGenerator } async function f3() { >f3 : () => Promise const syncGenerator = function*() { >syncGenerator : () => Generator<1 | 2, void, unknown> >function*() { yield 1; yield 2; } : () => Generator<1 | 2, void, unknown> yield 1; >yield 1 : any >1 : 1 yield 2; >yield 2 : any >2 : 2 }; const o = {[Symbol.asyncIterator]: syncGenerator}; >o : { [Symbol.asyncIterator]: () => Generator<1 | 2, void, unknown>; } >{[Symbol.asyncIterator]: syncGenerator} : { [Symbol.asyncIterator]: () => Generator<1 | 2, void, unknown>; } >[Symbol.asyncIterator] : () => Generator<1 | 2, void, unknown> >Symbol.asyncIterator : unique symbol >Symbol : SymbolConstructor >asyncIterator : unique symbol >syncGenerator : () => Generator<1 | 2, void, unknown> for await (const x of o) { >x : 1 | 2 >o : { [Symbol.asyncIterator]: () => Generator<1 | 2, void, unknown>; } } }