TypeScript TSConfig CompilerOptions ES2017 目标和库

Posted

技术标签:

【中文标题】TypeScript TSConfig CompilerOptions ES2017 目标和库【英文标题】:TypeScript TSConfig CompilerOptions ES2017 Target and Lib 【发布时间】:2017-08-14 20:14:30 【问题描述】:

我正在开发一个 TypeScript 项目,我们使用 ES2017 作为输出目标以及其中一个库,因为它将通过 Babel,我们希望支持最新的功能集我们在 Babel 中定位的“Env”。

一切似乎都很好,所以我不太担心。但是,我不知道幕后发生了什么或“lib”选项真正做了什么(除了告诉我的 IDE 我可以做什么,比如传播操作、承诺等),以及是否更多/指定 TypeScript 的最高输出然后编译到 Babel 中非常特定的目标效率较低。这也是通过 WebPack 进行的,因此我们正在利用 tree shaking 的优势。

第二个问题是,当 lib 中包含“ES2017”时,是否包含 ES2015 和 ES2016 中的所有功能(换句话说,是否有任何理由将 ES2015 和/或 ES2016 包含在列表中?)


  "compilerOptions": 
    "target": "ES2017",
    "module": "ES2015",
    "moduleResolution": "Node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "forceConsistentCasingInFileNames": true,
    "allowSyntheticDefaultImports": true,
    "noEmitHelpers": true,
    "importHelpers": true,
    "pretty": true,
    "alwaysStrict": true,
    "lib": [
      "DOM",
      "ES2017",
      "DOM.Iterable",
      "ScriptHost"
    ],
    "baseUrl": "./client",
    "paths": 
      "styles/*": ["./app/styles/*"],
      "core/*": ["./app/core/*"],
      "components/*": ["./app/components/*"],
      "containers/*": ["./app/containers/*"],
      "assets/*": ["./assets/*"],
      "config/*": ["./config/*"]
    
  ,
  "files": [
    "./client/custom-typings.d.ts",
    "./client/app/app.ts"
  ]

顺便说一句,在 Babel "Env" 中定位 "last 1 Chrome version" 时,它几乎不进行任何转译,这非常令人兴奋。我们只是在构建原型,而不是生产代码,因此我们会在需要支持时专门添加需要支持的浏览器,但几乎从不做任何不是 Chrome 的最后 1 或 2 个版本的事情。

【问题讨论】:

【参考方案1】:

看看Typescript GitHub 上lib 可能性的实际实现,似乎ES2017 包含所有这些包:

/// <reference path="lib.es2016.d.ts" />
/// <reference path="lib.es2017.object.d.ts" />
/// <reference path="lib.es2017.sharedmemory.d.ts" />
/// <reference path="lib.es2017.string.d.ts" />

es2016.d.ts 包含以下引用:

/// <reference path="lib.es2015.d.ts" />
/// <reference path="lib.es2016.array.include.d.ts" />

最后是 es2015.d.ts 参考:

/// <reference path="lib.es2015.core.d.ts" />
/// <reference path="lib.es2015.collection.d.ts" />
/// <reference path="lib.es2015.generator.d.ts" />
/// <reference path="lib.es2015.iterable.d.ts" />
/// <reference path="lib.es2015.promise.d.ts" />
/// <reference path="lib.es2015.proxy.d.ts" />
/// <reference path="lib.es2015.reflect.d.ts" />
/// <reference path="lib.es2015.symbol.d.ts" />
/// <reference path="lib.es2015.symbol.wellknown.d.ts" />
/// <reference path="lib.es5.d.ts" />

因此可以肯定地假设 es2017 包含大多数 ES 功能。

虽然有趣的是 es6 没有包含在任何地方,并且提供了单独的 file 没有任何引用。我真的不知道它是如何工作的,但我认为它是上述一些东西的单独组合。

编辑:

我对上述es6 困境进行了更多研究,并将我的发现发布在不同的question 中。

【讨论】:

以上是关于TypeScript TSConfig CompilerOptions ES2017 目标和库的主要内容,如果未能解决你的问题,请参考以下文章

typescript-eslint 未使用 tsconfig

将 typescript 错误连接到其关联的编译器选项 (tsconfig.json)

tsconfig.json:在 Atom 和 VSCode 的团队中使用 TypeScript?

未找到 tsconfig.json 中的 TypeScript 路径别名

Typescript tsconfig 排除一些源文件

typescript tsconfig.ts