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
属性指定的环境。