考虑 MDN 中的这个基本AsyncIterator 示例:
var asyncIterable = {
[Symbol.asyncIterator]() {
return {
i: 0,
next() {
if (this.i < 3) {
return Promise.resolve({ value: this.i++, done: false });
}
return Promise.resolve({ done: true });
}
};
}
};
(async function() {
for await (let num of asyncIterable) {
console.log(num);
}
})();
在节点 10.16.0 上运行它可以正常工作。但是,我似乎无法让它通过 Typescript 运行。使用这个 tsconfig:
{
"compilerOptions": {
"lib": ["es2016", "esnext.asynciterable"],
"target": "es2016"
}
}
导致The type returned by the 'next()' method of an async iterator must be a promise for a type with a 'value' property.
错误 target 的相同错误esnext
。
如果我完全删除该target
选项,我会得到一个Type '{ [Symbol.asyncIterator](): { i: number; next(): Promise<{ done: boolean; }>; }; }' is not an array type or a string type.
TS 手册提到了几个警告,但没有一个可以解决我的问题。奇怪的是,迭代异步生成器工作正常。
编译此示例需要哪些 tsconfig 选项?