@nikfarce

Нужен ли babel, если используешь TypeScript?

Всем доброго времени суток! Такой вопрос: зачем рекомендуется использовать babel с TypeScript?
Пробовал делать конфиг для проекта на React без babel, всё вроде как работало. Но на сайте babel написано, что если вы пишите на TypeScript, то используйте preset-typescript. Зачем? Какую задачу выполняет babel? Подскажите пожалуйста)
  • Вопрос задан
  • 1254 просмотра
Решения вопроса 2
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
Typescript compiler - это инструмент проверки типов и компиляции typescript в javascript. Так же он умеет транспайлить конструкции новых стандартов js в более старые стандарты, но это не основная задача этого инструмента, и делает он это хуже целевых инструментов, в частности его можно настроить только на конкретный стандарт.

Babel - это инструмент для парсинга js кода в AST, обхода и модификации AST и обратной сериализации AST в js. Так же это еще и экосистема плагинов и пресетов. Плагины как правило реализуют транспиляцию одной из фич более нового стандарта в более старый. Пресеты - это просто конфигурируемый набор плагинов.
Так же в Babel AST есть поддержка некоторых расширений js (а ts - это тоже расширение js), но включается это все флагами.

В экосистеме babel есть preset-env нацеленный именно на транспиляцию более новых стандартов в более старые. Его особенностью является поддержка browserlist и подключения только тех плагинов, которые нужны для указанных браузеров. За счет этого получается более оптимальный js на выходе, так как многие фичи после транспайлинга работают медленнее чем нативные и занимают больше кода.

Еще в экосистеме babel есть preset-typescript, который включает поддержку ts синтаксиса и транспиляцию ts в js. При этом, в отличии от tsc, он не делает проверку типов, а некоторые сущности может обрабатывать неправильно (как и большинство сторонних компиляторов ts, т.к. у ts нет строгой спеки и единственным источником правды является код tsc, который далек от идеального).

Оптимальным по выходному результату (пусть и за счет времени сборки) будет вариант, когда сначала ts код обрабатывается через tsc без транспиляции в старые стандарты, а затем происходит транспиляция с помощью babel + preset-env + browserlist.
Ответ написан
miraage
@miraage
Старый прогер
Зачастую, когда используется связка babel + typescript, то typescript выступает как typecheck инструмент. То есть, typescript ничего не компилит, а просто проверяет типы (через какой-нибудь fork-ts-checker-webpack-plugin).

А бабел уже имеет плагины, которые затем транслируют синтаксис typescript в js.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08
Нет, не нужен. Typescript самостоятельно обработает твой код таким образом, чтоб он соответствовал нужной тебе спецификации. Делает быстро, делает качественно, и не позволит скомпилить код с ошибками.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы