Когда tsconfig.json имеет следующее
"target": "es5",
"lib": [ "es6", "dom", "es2017" ]
похоже, он не преобразует конструкции es2017 в es5. Например, в IE11 произойдет сбой следующего:
var foo = [1, 2, 3].includes(1);
Это так задумано или мне не хватает параметра в tsconfig.json?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете увидеть список Совместимость с браузером для метода include здесь.
При этом он не поддерживал IE.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
Clarification on functionality of Typescript's target and lib settings
Упрощенно я думаю об этом так: target говорит, какой синтаксис будет иметь выходной JavaScript, а lib говорит, какой Члены API может использовать ваш исходный код TypeScript. Более подробно ответы на эти два вопроса:
...it doesn't seem to convert es2017 constructs to es5... Is this by design or am I missing a setting in tsconfig.json?
Ты прав. Это по дизайну. TypeScript преобразуется в синтаксис target; он не заполняет члены API, отсутствующие в target. Вот цитата от основного члена команды TypeScript:
I think you're confusing transpilation with auto-polyfilling. TypeScript doesn't automatically polyfill for you like Babel does, but does perform syntactic downleveling (e.g. for arrow functions). If you want to use ES6 runtime prototype methods, I'd simply include an appropriate ES6 polyfill and its accompanying definition file.
Если ваш lib включает элементы API (например, Array.prototype.include), которых нет в среде выполнения target, вам необходимо установить полифилы, которые предоставляют эти члены API.
Это путаница для меня. Такие вещи, как стрелочные функции, преобразуются, а другие функции из той же спецификации — нет.
Понял. Мой вопрос заключался в том, преобразует ли Typescript автоматически .includes (или другие операторы ES2017) в es5.