本文没有任何技术含量

TypeScript2.3新增了对异步迭代器的支持,但是在当前版本(2.3.4)中并未默认开启,直接使用会报以下错误:

error TS2318: Cannot find global type 'AsyncIterableIterator'. example.ts(10,26):

error TS2504: Type must have a 'Symbol.asyncIterator' method that returns an async iterator.

本文用于记录如何开启TypeScript对异步迭代器的支持

1.安装core-js依赖

使用npm执行以下命令

npm install core-js --save

2. 配置注入的lib

在tsconfig.json-compilerOptions-lib中增加esnext.asynciterable

如果出现报错,可以继续增加es2015到lib中

示例:

{
    "compilerOptions": {
        "target": "es2015",
        "module": "commonjs",
        "lib": [
        "esnext.asynciterable",
        "es2015"
        ]
    }
}

3. 导入async-iterator

在ts文件中加入以下语句:

import "core-js/modules/es7.symbol.async-iterator";

代码实例

import "core-js/modules/es7.symbol.async-iterator";

// await版sleep,在当前逻辑流上"休眠"timeout毫秒
const sleep = (timeout: number) => new Promise(r => setTimeout(() => r(), timeout));

// 一个异步生成器函数
async function* example_function() {
    for (let i = 0; i < 5; i++) {
        await sleep(1000);
        yield i;
    }
}

// 程序入口
(async function main() {
    for await (let i of example_function()) {
        console.log(i);
    }
})();