Vue 3 推荐 TypeScript TSConfig compilerOptions TARGET 设置?

ux.*_*eer 6 javascript compilation typescript vue.js vuejs3

在使用 Vue 2 和 Vue CLI 时,以及现在启动新的 Vue 3.0 beta 项目时,这个问题多次让我感到困惑。

即使使用当前最新的 Vue CLI 版本 4.3.1,在选择 TypeScript 选项时,给出的样板代码也会将compilerOptions 目标设置为 中的esnexttsconfig.json

虽然Vue 2 TypeScript 指南正在指导:

# Recommended Configuration
// tsconfig.json
{
  "compilerOptions": {
    // this aligns with Vue's browser support
    "target": "es5",
    // this enables stricter inference for data properties on `this`
    "strict": true,
    // if using webpack 2+ or rollup, to leverage tree shaking:
    "module": "es2015",
    "moduleResolution": "node"
  }
}
Run Code Online (Sandbox Code Playgroud)

目前Vue Next repo 正在使用esnext,尽管此时 IE11 支持尚未准备好(但无论如何可能不会影响此配置)...

使用 Vue 3 时,该编译器目标的推荐设置是什么?

我需要支持低至 IE11 的旧版浏览器,但这个特定的应用程序项目在首次发布之前有足够的时间来等待 Vue 3 的完整发布。

Est*_*ask 4

正如Vue 3 存储库所述,

当前的实现需要运行时环境为原生 ES2015+,并且尚不支持 IE11。IE11 兼容版本将在我们达到 RC 阶段后进行。

正如所指出的,Vue 3 目前的目标是esnext,它依赖于现代 JS 功能,目前的目标是在常青浏览器中进行开发,不应该在生产中使用。即使目标较低,Vue 3 也无法在旧版浏览器中使用,因为它目前依赖于无法进行多填充的 ES6 功能代理。

使用现有 Vue 3 构建的项目不会从target低于es2018这可能是最小公分母的项目中受益,对象传播是 Vue 3 代码库中使用的最近最流行的添加之一,并且不能进行多填充。可以es5通过downlevelIteration启用选项来实验性地降低 TypeScript 目标,以便及早检测到一些兼容性问题。

预计将为旧版 (IE11) 和现代浏览器维护单独版本的 Vue 3。区别在于反应性的处理方式,因为Proxy允许高级更改检测,但无法在旧版浏览器中实现。该项目应遵循Vue 2 反应性的现有指南,以便与旧版 Vue 3 构建兼容。