Angular 15兼容Chrome 69:如何polyfill空值合并与可选链运算符?
首先要明确:可选链运算符(?.)和空值合并运算符(??)属于JavaScript语法特性,而非ES标准API,core-js仅负责polyfill API层面的特性(比如Promise、Array.prototype.flat等),无法直接处理语法层面的兼容问题——这也是你之前导入对应模块提示“未找到”的原因,core-js根本没有这些模块。
不用Babel也能解决,只需通过TypeScript的编译配置转译这些语法,具体操作如下:
修改TypeScript编译目标
打开项目根目录的tsconfig.json,在compilerOptions中设置target为Chrome 69支持的ES版本,比如ES2015(Chrome 69对ES2015支持完整):{ "compilerOptions": { "target": "ES2015", // 其他原有配置保持不变 } }当TypeScript编译目标低于ES2020时,会自动将
?.和??转译为Chrome 69能识别的兼容代码。确认浏览器兼容配置
检查项目的browserslist文件(或package.json中的browserslist字段),确保包含Chrome 69的兼容规则:>= Chrome 69Angular会根据该配置自动调整编译逻辑,确保输出代码适配目标浏览器。
无需额外添加core-js导入
你现有的import 'core-js/stable';和import 'regenerator-runtime/runtime';已经覆盖了API层面的polyfill需求,不需要再添加其他core-js相关导入。
完成以上配置后,重新构建项目,Chrome 69中关于这两个运算符的错误即可解决。
内容的提问来源于stack exchange,提问作者Nitin Avula

