TypeScript项目的tsconfig.json到底有用吗?附遍历Map踩坑记录

如题,我把tsconfig.json里的target改成es6或者es2015,自动生成的js代码还是es5的,而且使用for of遍历Map的代码明显不对,是取了Map的length来遍历。我之前用js开发的项目里遍历Map的代码可以被转成正确的es5代码。

这是creator对ts的支持问题吗?有没有大神碰到过这种问题?求指导:pray:
以下是示例代码. 所有的遍历代码只有foreach可以打印出log.
但foreach有个缺点是不能break.

---------------------------遍历map算暂时解决了, 感谢楼下同学分享, 附踩坑记录------------------------------

---------------------------希望官方早日支持ts导出es6代码---------------------------

  • Creator 版本:2.0.9

  • 目标平台: Web

  • 详细报错信息,包含调用堆栈:

  • 重现方式:使用ts遍历map

  • 之前哪个版本是正常的 :js项目

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :

  • 编辑器之前是否有其它报错 :

  • 出现概率:100%

  • 额外线索:

修改lib

不过map是es6中提供的,一般的tsconfig-lib中都会带es6,不知道你说的遍历map错误指的是什么。

另外,creator所用的是自带的js编译器,所以target并没有什么用。

ps 如果for…of不能遍历,还有forEach(),keys(),entries()方法可以遍历

已补充图片. 生成的es5代码是获取迭代器的length属性遍历, 迭代器没有length属性, 所以是走不到循环里面的.

直接用tsc编译, 会提示:Type ‘Map<string, number>’ is not an array type or a string type. Use compiler option ‘–downlevelIteration’ to allow iterating of iterators.

在tsc编译选项里加上–downlevelIteration 确实可以生成正确代码, 或是target设置为es6也可以. 无奈修改creator项目里的tsconfig没有任何效果.

我也遇到过这个问题, 在 cocos 里用 for of 的时候无法遍历 iterator
可以用下面这种方式勉强凑活以下

for (let entries = map.entries(), entry = entries.next(); !entry.done; entry = entries.next()) {
    const [key, value] = entry.value;
    console.log(key, value)
}

或者

for(const [key, value] of Array.from(map.entries())) {
    console.log(key, value)
}

我在需要频繁使用 iterator 比如使用yield, 这种状况下, 会写成外部库文件, 用webpack先打个包编译成es5, 在导入到 cocos里

1赞

感谢分享, 希望creator能让修改tsconfig有效果