@babel/preset-typescript
Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Este preset se recomienda si utilizas TypeScript, un superconjunto tipado de JavaScript. Incluye los siguientes plugins:
Deberás especificar
--extensions ".ts"para que las CLI de@babel/cliy@babel/nodemanejen archivos.ts.
Ejemplo
Entrada
const x: number = 0;
Salida
const x = 0;
Instalación
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/preset-typescript
yarn add --dev @babel/preset-typescript
pnpm add --save-dev @babel/preset-typescript
bun add --dev @babel/preset-typescript
Uso
Mediante un archivo de configuración (Recomendado)
{
"presets": ["@babel/preset-typescript"]
}
Mediante la CLI
babel --presets @babel/preset-typescript script.ts
Mediante la API de Node
require("@babel/core").transformSync("code", {
presets: ["@babel/preset-typescript"],
filename: 'script.ts',
});
Opciones
isTSX
boolean, valor predeterminado: false
Habilita forzosamente el análisis de jsx. De lo contrario, los corchetes angulares se tratarán como la aserción de tipo heredada de TypeScript var foo = <string>bar;. Además, isTSX: true requiere allExtensions: true.
jsxPragma
string, valor predeterminado: React
Reemplaza la función utilizada al compilar expresiones JSX. Esto permite identificar que la importación no es de tipo y no debe eliminarse.
jsxPragmaFrag
string, valor predeterminado: React.Fragment
Reemplaza la función utilizada al compilar expresiones de fragmentos JSX. Esto permite identificar que la importación no es de tipo y no debe eliminarse.
allExtensions
boolean, valor predeterminado: false
Indica que cada archivo debe analizarse como TS, TSX o como TS sin ambigüedades de JSX (según las opciones isTSX y disallowAmbiguousJSXLike).
allowNamespaces
boolean, utiliza el valor predeterminado establecido por @babel/plugin-transform-typescript.
Añadido en: v7.6.0
Habilita la compilación de espacios de nombres (namespaces) de TypeScript.
allowDeclareFields
boolean, valor predeterminado: false
Añadido en: v7.7.0
NOTA: Esto estará habilitado por defecto en Babel 8
Cuando está habilitado, los campos de clase exclusivamente de tipo solo se eliminan si están prefijados con el modificador declare:
class A {
declare foo: string; // Removed
bar: string; // Initialized to undefined
prop?: string; // Initialized to undefined
prop1!: string // Initialized to undefined
}
disallowAmbiguousJSXLike
boolean, valor predeterminado: true para archivos .mts y .cts, y false en caso contrario.
Añadido en: v7.16.0
Incluso cuando el análisis de JSX no está activado, esta opción prohíbe el uso de sintaxis que sería ambigua con JSX (afirmaciones de tipo <X> y y argumentos de tipo <X>() => {}). Coincide con el comportamiento de tsc al analizar archivos .mts y .mjs.
ignoreExtensions
boolean, valor predeterminado: false
Añadido en: v7.21.4
Cuando se establece en false, Babel proporcionará automáticamente los plugins necesarios para archivos *.ts, *.tsx, *.mts y *.cts.
Cuando se establece en true, Babel proporcionará un plugin general de TS. Si deseas transpilar código como si fuera *.tsx, habilita el preset @babel/preset-react y este plugin funcionará con la transformación JSX sin problemas. Por ejemplo:
{
"presets": ["@babel/preset-react"],
"overrides": [{
"test": "*.vue",
"presets": [
["@babel/preset-typescript"], { "ignoreExtensions": true }
]
}]
}
onlyRemoveTypeImports
boolean, valor predeterminado: false
Añadido en: v7.9.0
Cuando se establece en true, la transformación solo eliminará importaciones solo de tipo (introducidas en TypeScript 3.8). Solo debe usarse si utilizas TypeScript >= 3.8.
optimizeConstEnums
boolean, valor predeterminado: false
Añadido en: v7.15.0
Cuando se establece en true, Babel insertará en línea los valores de la enumeración en lugar de usar la salida enum habitual:
// 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);
Esta opción difiere del comportamiento de --isolatedModules de TypeScript, que ignora el modificador const y los compila como enumeraciones normales, alineando el comportamiento de Babel con el funcionamiento predeterminado de TypeScript.
Sin embargo, al exportar un const enum, Babel lo compilará como un objeto literal simple para evitar depender de análisis entre archivos:
// Input
export const enum Animals {
Fish,
}
// `optimizeConstEnums` output
export var Animals = {
Fish: 0,
};
Puedes leer más sobre cómo configurar opciones de presets aquí.
rewriteImportExtensions
boolean, valor predeterminado: false
Añadido en: v7.23.0
Cuando se establece en true, Babel reescribirá las extensiones .ts/.mts/.cts en declaraciones de importación a .js/.mjs/.cjs. Esta opción refleja la opción rewriteRelativeImportExtensions de TypeScript.
Esta opción, al usarse junto con la opción allowImportingTsExtension de TypeScript, permite escribir especificadores relativos completos en declaraciones de importación usando la misma extensión que los archivos fuente.
Por ejemplo, dada esta estructura de proyecto (donde src contiene los archivos fuente y dist los archivos compilados):
.
├── src
│ ├── main.ts
│ └── dep.ts
├── dist
│ ├── main.js
│ └── dep.js
├── babel.config.json
└── tsconfig.json
y con los siguientes archivos de configuración:
| babel.config.json | tsconfig.json |
|---|---|
| |
podrás escribir import x from "./dep.ts" en main.ts, y Babel lo transformará a import x from "./dep.js" al compilar main.ts a main.js.