# @babel/预设打字稿

如果您使用了 TypeScript 这一 JavaScript 超集,则建议您使用此预设(preset)。它包含以下插件:

  • @babel/plugin-transform-typescript

你需要为 @babel/cli@babel/node命令行工具指定 --extensions ".ts"参数,以使其能够处理 .ts文件。

# 示例 (opens new window)

输入

const x: number = 0;

输出

JavaScript

const x = 0;

# 安装 (opens new window)

  • npm
npm install --save-dev @babel/preset-typescript
  • yarn
yarn add --dev @babel/preset-typescript

# 用法 (opens new window)

# 通过配置文件(推荐) (opens new window)

babel.config.json

{
  "presets": ["@babel/preset-typescript"]
}

# 通过命令行工具(CLI) (opens new window)

babel --presets @babel/preset-typescript script.ts

# 通过 Node API

JavaScript

require("@babel/core").transformSync("code", {
  presets: ["@babel/preset-typescript"],
  filename: 'script.ts',
});

# 参数 (opens new window)

# isTSX (opens new window)

boolean类型,默认值为 false

强制开启 jsx解析。否则,尖括号将被视为 typescript 的类型断言(type assertion) var foo = <string>bar;。另外,isTSX: true需要 allExtensions: true

# jsxPragma (opens new window)

string类型,默认值为 React

替换编译 JSX 表达式时所使用的函数。这样我们就能知道是 import 而不是 type import,因此不应将其删除。

# jsxPragmaFrag (opens new window)

string, 默认为React.Fragment

替换编译 JSX 片段表达式时使用的函数。这是为了让我们知道导入不是类型导入,不应删除。

# allExtensions (opens new window)

boolean类型,默认值为 false

指示每个文件都应解析为 TS、TSX 或没有 JSX 歧义的 TS(取决于isTSXdisallowAmbiguousJSXLike选项)。

# allowNamespaces (opens new window)

boolean类型,使用 @babel/plugin-transform-typescript 的默认设置。

添加于:v7.6.0

开启 TypeScript 命名空间的编译。

# allowDeclareFields (opens new window)

boolean类型,默认值为 false

添加于:v7.7.0

注意:此参数在 Babel 8 中将默认开启。

启用时,仅类型类字段仅在它们以修饰符为前缀时才会被删除declare

class A {
  declare foo: string; // Removed
  bar: string; // Initialized to undefined
  prop?: string; // Initialized to undefined
  prop1!: string // Initialized to undefined
}

# disallowAmbiguousJSXLike (opens new window)

boolean,默认为true.mts文件.ctsfalse否则为。

添加于:v7.16.0

即使未启用 JSX 解析,此选项也不允许使用与 JSX 不明确的语法(<X> y类型断言和<X>() => {}类型参数)。它匹配tsc解析.mts.mjs文件时的行为。

# onlyRemoveTypeImports (opens new window)

boolean类型,默认值为 false

添加于:v7.9.0

当设置为 true时,转换时只是删除 type-only imports (在 TypeScript 3.8 版本中引入)。仅在使用 TypeScript >= 3.8 版本时才应使用此参数。

# optimizeConstEnums (opens new window)

boolean, 默认为false

添加于:v7.15.0

当设置为 时true,Babel 将内联枚举值而不是使用通常的enum输出:

// Input
const enum Animals {
  Fish
}
console.log(Animals.Fish);

// Default output
var Animals;

(function (Animals) {
  Animals[Animals["Fish"] = 0] = "Fish";
})(Animals || (Animals = {}));

console.log(Animals.Fish);

// `optimizeConstEnums` output
console.log(0);

这个选项不同于 TypeScript 的--isolatedModules行为,它忽略const修饰符并将它们编译为普通枚举,并将 Babel 的行为与 TypeScript 的默认行为对齐。

但是,导出Babel时const enum会将其编译为普通对象字面量,因此在编译时不需要依赖跨文件分析:

// Input
export const enum Animals {
  Fish,
}

// `optimizeConstEnums` output
export var Animals = {
  Fish: 0,
};

您可以在 这里 可以阅读到更多有关配置预设参数的信息。

Last Updated: 6/14/2023, 8:56:23 AM