@babel/preset-typescript
如果您使用 TypeScript(JavaScript 的类型化超集),则建议使用此预设。 它包含以下插件
您需要为
@babel/cli和@babel/nodeCLI 指定--extensions ".ts"以处理.ts文件。
示例
输入
const x: number = 0;
输出
const x = 0;
安装
- npm
- Yarn
- pnpm
npm install --save-dev @babel/preset-typescript
yarn add --dev @babel/preset-typescript
pnpm add --save-dev @babel/preset-typescript
用法
使用配置文件(推荐)
{
"presets": ["@babel/preset-typescript"]
}
通过 CLI
babel --presets @babel/preset-typescript script.ts
通过 Node API
require("@babel/core").transformSync("code", {
presets: ["@babel/preset-typescript"],
filename: 'script.ts',
});
选项
isTSX
boolean,默认为 false
强制启用 jsx 解析。 否则,尖括号将被视为 TypeScript 的旧版类型断言 var foo = <string>bar;。 此外,isTSX: true 需要 allExtensions: true。
jsxPragma
string,默认为 React
替换编译 JSX 表达式时使用的函数。 这是为了让我们知道导入不是类型导入,不应删除。
jsxPragmaFrag
string,默认为 React.Fragment
替换编译 JSX 片段表达式时使用的函数。 这是为了让我们知道导入不是类型导入,不应删除。
allExtensions
boolean,默认为 false
指示应将每个文件解析为 TS、TSX 或没有 JSX 歧义的 TS(取决于 isTSX 和 disallowAmbiguousJSXLike 选项)。
allowNamespaces
boolean,使用 @babel/plugin-transform-typescript 设置的默认值。
添加于:v7.6.0
启用 TypeScript 命名空间的编译。
allowDeclareFields
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
boolean,对于 .mts 和 .cts 文件默认为 true,否则默认为 false。
添加于:v7.16.0
即使未启用 JSX 解析,此选项也不允许使用与 JSX 不明确的语法(<X> y 类型断言和 <X>() => {} 类型参数)。 它与解析 .mts 和 .mjs 文件时 tsc 的行为相匹配。
ignoreExtensions
boolean,默认为 false
添加于:v7.21.4
当它设置为 false 时,Babel 将自动为 *.ts、*.tsx、*.mts 和 *.cts 文件提供所需的插件。
当它设置为 true 时,Babel 将提供一个通用的 TS 插件。 如果您想将源代码转译为 *.tsx,请启用 @babel/preset-react 预设,并且此插件应该与 JSX 转换无缝协作。 例如,
{
"presets": ["@babel/preset-react"],
"overrides": [{
"test": "*.vue",
"presets": [
["@babel/preset-typescript"], { "ignoreExtensions": true }
]
}]
}
onlyRemoveTypeImports
boolean,默认为 false
添加于:v7.9.0
设置为 true 时,转换将仅删除 仅类型导入(在 TypeScript 3.8 中引入)。 这应该仅在您使用 TypeScript >= 3.8 时使用。
optimizeConstEnums
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 的默认行为保持一致。
但是,当*导出* const enum 时,Babel 会将其编译为普通的对象字面量,以便在编译它时不需要依赖跨文件分析
// Input
export const enum Animals {
Fish,
}
// `optimizeConstEnums` output
export var Animals = {
Fish: 0,
};
您可以在 此处 阅读有关配置预设选项的更多信息。
rewriteImportExtensions
boolean,默认为 false
添加于:v7.23.0
设置为 true 时,Babel 会将导入声明中的 .ts/.mts/.cts 扩展名重写为 .js/.mjs/.cjs。
此选项与 TypeScript 的 allowImportingTsExtension 选项一起使用时,允许在导入声明中编写完整的相对说明符,同时使用源文件使用的相同扩展名。
例如,给定此项目结构(其中 src 包含源文件,dist 包含编译后的文件)
.
├── src
│ ├── main.ts
│ └── dep.ts
├── dist
│ ├── main.js
│ └── dep.js
├── babel.config.json
└── tsconfig.json
并使用以下配置文件
| babel.config.json | tsconfig.json |
|---|---|
| |
您将能够在 main.ts 中编写 import x from "./dep.ts",并且 Babel 在将 main.ts 编译为 main.js 时会将其转换为 import x from "./dep.js"。