簡體   English   中英

可以使用 Babel 轉換成 TypeScript 嗎?

[英]It is possible to transpile into TypeScript using Babel?

我知道 Babel 現在支持 TypeScript樣式類型注釋。 但是,它不會像 TypeScript 編譯器那樣檢查類型,它會從 output 中刪除類型注釋。 我想要實現的是:

  1. 使用 TypeScript 注釋將 stage-0 代碼轉換為 vanilla TypeScript
  2. 使用 TypeScript 編譯器檢查類型
  3. Output JavaScript 兼容Node或瀏覽器

這可能嗎?

我很好奇,所以我聯系了Nicolò Ribaudo ,他在 Babel 上做了很多工作,事實證明這比我想象的要容易:你可以告訴 Babel解析類型注釋,但不能使用TypeScript語法插件@babel/plugin-syntax-typescript 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);

...它生成這個 output 並轉換了管道運算符,但類型注釋仍然存在:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM