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
упомянутая выше дилемма и опубликовала мои выводы в другом вопросе.