最近基础库线上遇到一个很奇怪的问题,用户在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;它只是假定你本身项目所运行的环境是tsconfiglib属性指定的环境。