为何TypeScript设置ES3目标时未转换Array.map/filter等方法?
ES3环境下TypeScript使用Array.map/filter等方法的polyfill需求
结论:必须手动引入polyfill
原因如下:
- TypeScript的
target编译选项仅负责语法降级,比如把ES6的类、箭头函数这类语法转换成ES3能识别的函数写法,但不会处理JavaScript内置对象的新增方法。Array.map、Array.filter是ES5才新增的数组实例方法,ES3环境的原生JS引擎根本没有这些方法,TypeScript编译器不会自动补充这些方法的实现代码。 - TypeScript的
lib配置只是提供对应的类型定义,让你写代码时能通过类型检查,同样不会生成polyfill代码。哪怕你把lib设为["ES5"],也只是解决类型提示问题,运行时ES3环境还是找不到这些方法。 - 纯TypeScript编译流程不包含polyfill注入逻辑,如果需要兼容ES3环境,要么手动引入这些方法的polyfill代码,要么配合Babel这类工具(比如
@babel/preset-env)来自动按需注入polyfill。
内容的提问来源于stack exchange,提问作者Kris
相关产品推荐
相关产品推荐

