Разъяснение функциональности цели Typescript и настроек lib - PullRequest
1 голос
/ 15 мая 2019

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

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

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

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

Это из-за намерения или я пропустил настройку в tsconfig.json?

Ответы [ 2 ]

1 голос
/ 15 мая 2019

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

Упрощенный способ, которым я думаю об этом, состоит в том, что target говорит, что синтаксис будет иметь выходной JavaScript, а lib говорит, что члены API ваш исходный код TypeScript может использовать , Более подробно в ответах на эти два вопроса:

... кажется, что он не конвертирует конструкции es2017 в es5 ... Это специально или я пропустил настройку в tsconfig.json?

Ты прав. Это по замыслу. TypeScript переносится в синтаксис target; он не заполняет элементы API, отсутствующие в target. Вот цитата от основного члена команды TypeScript:

Я думаю, вы путаете транспиляцию с авто-заполнением. TypeScript не автоматически заполняет вас автоматически, как Babel, но выполняет синтаксическое понижение (например, для функций со стрелками). Если вы хотите использовать методы-прототипы ES6 во время выполнения, я просто включил бы соответствующий полифилл ES6 и сопровождающий его файл определения.

Если ваш lib включает элементы API (например, Array.prototype.include), которых нет во время выполнения target, вам необходимо установить полизаполнения, предоставляющие эти элементы API.

0 голосов
/ 15 мая 2019

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

enter image description here

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

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

...