TypeScript TSConfig CompilerOptions ES2017 Target и Lib

Я работаю над проектом TypeScript, и мы используем ES2017 в качестве выходной цели, а также одну из библиотек, потому что затем он пройдет через Babel, и мы хотим поддерживать последний набор функций для любого "Env" мы нацеливаемся на Бабель.

Кажется, все работает нормально, поэтому я не слишком беспокоюсь об этом. Тем не менее, я не знаю, что происходит за кулисами или что на самом деле делает опция "lib" (кроме как сказать моей IDE, что я могу сделать, например, распространение операций, обещания и т. Д.), И если это больше / менее эффективно указывать наивысший вывод из TypeScript для последующей компиляции с очень конкретной целью в Babel. Это также происходит через WebPack, поэтому мы используем преимущества тряски деревьев.

Второй вопрос: когда ES2017 включен в библиотеку, включает ли он все функции в ES2015 и ES2016 (другими словами, есть ли какая-либо причина для включения ES2015 и / или ES2016 с ES2017 в список?)

{
  "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"
  ]
}

Кроме того, при нацеливании на "последнюю 1 версию Chrome" в Babel "Env", он вряд ли что-либо делает, что довольно захватывающе. Мы просто создаем прототипы, а не рабочий код, поэтому мы специально добавляем браузеры, которые нам необходимо поддерживать, когда нам нужно их поддерживать, но почти никогда не делаем ничего, кроме последних 1 или 2 версий Chrome.

1 ответ

Хорошо глядя на фактическую реализацию lib возможности на Typescript GitHub, кажется, что 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 нигде не включен и предоставляет отдельный файл без каких-либо ссылок. Я действительно не знаю, как это работает, но я предполагаю, что это отдельная комбинация некоторых вещей, упомянутых выше.

РЕДАКТИРОВАТЬ:

Я провел еще несколько исследований es6 упомянутая выше дилемма и опубликовала мои выводы в другом вопросе.

Другие вопросы по тегам