• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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