TS中includes等API不识别坑
2022年3月10日
最近基础库线上遇到一个很奇怪的问题,用户在android 5.0浏览器上访问引入基础库的页面时直接报错,错误信息是经典的"Can not read property xxx of undefined"错误。经过分析调研发现是因为项目中使用了Array.prototype.includes导致。定位到问题后优先加了polyfill解决线上问题.
事后调研为什么会发生这样的问题,最终结论如下:
typescript本身的编译工具只会对所谓的语法(也就是
syntax)进行转换,以匹配tsconfig.json中的target选项,而对于es6/7/8中新出现的API,比如Array.prototype.includes,Object.values等方法,typescript并不会进行转换。
ts代码

编译后代码
最终结论
typescript本身是静态检查工具,它不会在运行时根据代码所运行的环境再自动polyfill;它只是假定你本身项目所运行的环境是tsconfig的lib属性指定的环境。