Можно ли перейти на TypeScript с помощью Babel? - PullRequest
5 голосов
/ 05 ноября 2019

Я понимаю, что Babel теперь поддерживает тип-аннотации в стиле TypeScript . Однако он не проверяет типы, как это делает компилятор TypeScript, и удаляет аннотации типов из выходных данных. Чего я хотел бы добиться:

  1. Прозрачный код stage-0 с аннотациями TypeScript для ванили TypeScript
  2. Проверка типов с помощью компилятора TypeScript
  3. Вывод JavaScript-совместимогос Node или браузером

Возможно ли это?

1 Ответ

4 голосов
/ 05 ноября 2019

Мне было любопытно, поэтому я пингнул Николо Рибаудо , который много работает над Babel, и оказалось, что это проще, чем я думал: вы можете сказать Babel parse typeаннотации, но не , удалите их, используя синтаксический плагин TypeScript (@babel/plugin-syntax-typescript), но не пресет TypeScript (@babel/preset-typescript).

Например, если вы хотите передать поддержку оператора конвейера, ваш .babelrc может выглядеть следующим образом:

{
  "plugins": [
    "@babel/plugin-syntax-typescript",
    [
      "@babel/plugin-proposal-pipeline-operator",
      {
        "proposal": "minimal"
      }
    ]
  ]
}

Тогда, если вы отправите Babel этот .ts файл:

function doubleSay(str: string) {
  return str + ", " + str;
}
function capitalize(str: string) {
  return str[0].toUpperCase() + str.substring(1);
}
function exclaim(str: string) {
  return str + '!';
}

let result = "hello"
  |> doubleSay
  |> capitalize
  |> exclaim;

console.log(result);

... он генерирует этот вывод с конвейерным оператором конвейера, но аннотации типов все еще на месте:

var _ref, _ref2, _hello;

function doubleSay(str: string) {
  return str + ", " + str;
}

function capitalize(str: string) {
  return str[0].toUpperCase() + str.substring(1);
}

function exclaim(str: string) {
  return str + '!';
}

let result = (_ref = (_ref2 = (_hello = "hello", doubleSay(_hello)), capitalize(_ref2)), exclaim(_ref));
console.log(result);
...