Type ‘IterableIterator’ 不是数组类型或字符串类型
Type ‘IterableIterator’ is not an array type or string type
要解决“Type ‘IterableIterator’ is not an array or a string type”错误,请在您的文件
中将该target
属性设置为或启用以发出更符合要求的 JavaScript 代码进行迭代。es6
tsconfig.json
downlevelIteration
下面是错误如何发生的两个示例。
索引.ts
function* generator(a: number, b: number, c: number): IterableIterator<number> { yield a; yield b; yield c; } // ⛔️ Error: Type 'IterableIterator<number>' is not an array type // or a string type. Use compiler option '--downlevelIteration' // to allow iterating of iterators.ts(2569) for (const num of generator(5, 10, 15)) { console.log(num); // 👉️ 5, 10, 15 } // ------------------------------------------------------------------- const regexp = RegExp('he*', 'g'); const str = 'hello hey hi'; const matches = str.matchAll(regexp); // ⛔️ Error: Type 'IterableIterator<RegExpMatchArray>' is not // an array type or a string type. Use compiler option // '--downlevelIteration' to allow iterating of iterators.ts(2569) for (const match of matches) { console.log(match); }
更新你的tsconfig.json
要解决该错误,请在
tsconfig.jsontarget
文件中将属性设置为。es6
tsconfig.json文件
{ "compilerOptions": { "target": "es6", // ... your other options } }
target选项更改哪些 JavaScript 特性被降级,哪些保持不变。
如果这不能解决错误,请尝试重新启动 IDE。VSCode 经常出现故障并需要重启。
如果您使用该String.matchAll
方法但错误仍未解决,请添加
ES2020.String
到您的lib
数组中tsconfig.json
。
tsconfig.json文件
{ "compilerOptions": { "target": "es6", "lib": [ "ES2020.String", // ... your other libs ], // ... your other options } }
ES6 是一个不错的选择,因为现代浏览器支持所有 ES6 特性。
如果您需要支持较旧的环境,则可以使用该downlevelIteration
选项来解决错误。
tsconfig.json文件
{ "compilerOptions": { "target": "es5", "downlevelIteration": true, // ... your other options }, }
downlevelIteration
选项将您的 TypeScript 代码转换为旧版本的 JavaScript 。
这会使您的代码性能降低且更加冗长,但是,它能够在更旧的浏览器中运行。
ES6 添加了多个迭代原语,例如for...of
循环、
数组展开 [...myArr1, ...myArr2]
等。
如果您需要将这些迭代原语设置为target
,es5
则必须downlevelIteration
在您的tsconfig.json
文件中启用。
请注意,发出的 JavaScript 非常冗长且性能低于通过设置为保持迭代原语不变的target
情况es6
。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: