verbatimModuleSyntax
Los imports significan lo que dicen
Un import usado solo como tipo debe escribirse `import type`, de modo que el JavaScript emitido sea lo que muestra el fuente.
- Desde
- TypeScript 5.0
- strict
- Fuera de strict
- En tu tsconfig
"verbatimModuleSyntax": true- Compilado con
"module": "esnext""moduleResolution": "bundler"
El mismo fragmento las dos veces. Solo cambió la opción.
Con ella apagada
"verbatimModuleSyntax": falsemain.ts
import { Widget } from './widget' export const make = (): Widget => ({ id: 1 })
widget.ts
export type Widget = { id: number }
Compila limpio
Con ella encendida
"verbatimModuleSyntax": truemain.ts
import { Widget } from './widget' export const make = (): Widget => ({ id: 1 })
widget.ts
export type Widget = { id: number }
Emite TS1484
Por qué al compilador le importa
El compilador decidía por ti: un import cuyos enlaces resultaban ser solo tipos se eliminaba de la salida. Eso es invisible y se lleva mal con todo lo demás —un módulo importado por su efecto secundario desaparece, un empaquetador que transpila archivo a archivo no puede tomar la misma decisión, y dos herramientas discrepan sobre qué es el archivo—. Esta bandera lleva la decisión al código, donde es revisable y donde toda herramienta lee la misma respuesta.
Conclusión
Lo que dice el archivo es lo que el archivo emite. Esa es toda la opción.
Adónde ir después
22 opciones

