Разъяснение по функциональности настроек цели и библиотеки Typescript

Когда tsconfig.json имеет следующее

"target": "es5",
"lib": [ "es6", "dom", "es2017" ]

похоже, он не преобразует конструкции es2017 в es5. Например, в IE11 произойдет сбой следующего:

var foo = [1, 2, 3].includes(1);

Это так задумано или мне не хватает параметра в tsconfig.json?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
108
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете увидеть список Совместимость с браузером для метода include здесь.

При этом он не поддерживал IE.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes

Понял. Мой вопрос заключался в том, преобразует ли Typescript автоматически .includes (или другие операторы ES2017) в es5.

AngryHacker 15.05.2019 04:00
Ответ принят как подходящий

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.

Это путаница для меня. Такие вещи, как стрелочные функции, преобразуются, а другие функции из той же спецификации — нет.

AngryHacker 15.05.2019 20:55

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