@babel/preset-typescript
如果您使用了 TypeScript 这一 JavaScript 超集,则建议您使用此预设(preset)。它包含以下插件:
你需要为
@babel/cli
和@babel/node
命令行工具指定--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 的类型断言(type assertion) var foo = <string>bar;
。另外,isTSX: true
需要 allExtensions: true
jsxPragma
string
类型,默认值为 React
。
替换编译 JSX 表达式时所使用的函数。这样我们就能知道是 import 而不是 type import,因此不应将其删除。
jsxPragmaFrag
string
, defaults to React.Fragment
Replace the function used when compiling JSX fragment expressions. This is so that we know that the import is not a type import, and should not be removed.
allExtensions
boolean
类型,默认值为 false
。
Indicates that every file should be parsed as TS, TSX, or as TS without JSX ambiguities (depending on the isTSX
and disallowAmbiguousJSXLike
options).
allowNamespaces
boolean
类型,使用 @babel/plugin-transform-typescript
的默认设置。
Added in: v7.6.0
开启 TypeScript 命名空间的编译。
allowDeclareFields
boolean
类型,默认值为 false
。
添加于: v7.7.0
注意:此参数在 Babel 8 中将默认开启。
When enabled, type-only class fields are only removed if they are prefixed with the declare
modifier:
class A {
declare foo: string; // Removed
bar: string; // Initialized to undefined
prop?: string; // Initialized to undefined
prop1!: string // Initialized to undefined
}
disallowAmbiguousJSXLike
boolean
, defaults to true
for .mts
and .cts
files and to false
otherwise.
Added in: v7.16.0
Even when JSX parsing is not enabled, this option disallows using syntax that would be ambiguous with JSX (<X> y
type assertions and <X>() => {}
type arguments). It matches the tsc
behavior when parsing .mts
and .mjs
files.
ignoreExtensions
boolean
, defaults to false
Added in: v7.21.4
When it is set to false
, Babel will automatically provide required plugins for *.ts
, *.tsx
, *.mts
and *.cts
files.
When it is set to true
, Babel will provide a general TS plugin. If you want to transpile source as if it were *.tsx
, enable the @babel/preset-react
preset and this plugin should work with the JSX transform seamlessly. For example,
{
"presets": ["@babel/preset-react"],
"overrides": [{
"test": "*.vue",
"presets": [
["@babel/preset-typescript"], { "ignoreExtensions": true }
]
}]
}
onlyRemoveTypeImports
boolean
类型,默认值为 false
。
添加于: v7.9.0
当设置为 true
时,转换时只是删除 type-only imports (在 TypeScript 3.8 版本中引入)。仅在使用 TypeScript >= 3.8 版本时才应使用此参数。
optimizeConstEnums
boolean
, defaults to false
Added in: v7.15.0
When set to true
, Babel will inline enum values rather than using the usual enum
output:
// 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);
This option differs from TypeScript's --isolatedModules
behavior, which ignores the const
modifier and compiles them as normal enums, and aligns Babel's behavior with TypeScript's default behavior.
However, when exporting a const enum
Babel will compile it to a plain object literal so that it doesn't need to rely on cross-file analysis when compiling it:
// Input
export const enum Animals {
Fish,
}
// `optimizeConstEnums` output
export var Animals = {
Fish: 0,
};
你可以在 这里 阅读到更多有关配置预设参数的信息。
rewriteImportExtensions
boolean
, defaults to false
Added in: v7.23.0
When set to true
, Babel will rewrite .ts
/.mts
/.cts
extensions in import declarations to .js
/.mjs
/.cjs
.
This option, when used together with TypeScript's allowImportingTsExtension
option, allows to write complete relative specifiers in import declarations while using the same extension used by the source files.
As an example, given this project structure (where src
contains the source files, and dist
the compiled files):
.
├── src
│ ├── main.ts
│ └── dep.ts
├── dist
│ ├── main.js
│ └── dep.js
├── babel.config.json
└── tsconfig.json
and with the following configuration files:
babel.config.json | tsconfig.json |
---|---|
|
|
you will be able to write import x from "./dep.ts"
in main.ts
, and Babel will transform it to import x from "./dep.js"
when compiling main.ts
to main.js
.