为何不在tsconfig中始终将编译目标设为es3?
虽然ES3的兼容性理论上最广,但选择更高版本的编译目标有这些关键优势:
性能与执行效率:更新的JavaScript特性(比如箭头函数、Promise、async/await、Map/Set等)在现代浏览器中是原生支持的,编译到ES3需要将这些特性转译成大量冗余的兼容代码。比如async/await会被转译成嵌套的Promise或回调函数,不仅代码体积变大,运行时的执行效率也远低于原生实现。
代码体积优化:更高的编译目标不需要转译大部分现代特性,打包后的最终代码体积更小,加载速度更快,能直接提升用户的页面加载体验。比如ES6的解构语法、模板字符串可以直接保留,不用转译成繁琐的ES3等价代码。
实际兼容性覆盖:如今超旧浏览器(如IE6-8)的市场占比已经极低,几乎可以忽略不计。绝大多数用户使用的浏览器都支持ES2015及以上版本,选择更高的编译目标并不会显著减少可运行你应用的用户群体,反而能让绝大多数用户获得更好的体验。
完整的特性支持:部分现代JavaScript特性(如Proxy、BigInt、Symbol的某些用法)无法通过转译完全模拟成ES3代码。如果你的应用依赖这些特性,编译到ES3要么无法实现功能,要么只能得到一个功能受限的模拟版本,而选择更高的编译目标可以直接使用原生特性,保证功能的完整性和可靠性。
调试与维护便利性:编译到更高版本的代码更接近你编写的TypeScript源码,调试时更容易对应到原始代码逻辑,排查问题更高效。而转译成ES3的代码往往会被过度改写,增加调试和维护的成本。
内容的提问来源于stack exchange,提问作者Scott Bishop

