Saltar al contenido
webtype.orgwebtype.orgtsconfig

    ↑↓ mover · ⏎ abrir · esc cerrar

    tsconfig

    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": false

    main.ts

    import { Widget } from './widget'
    
    export const make = (): Widget => ({ id: 1 })

    widget.ts

    export type Widget = { id: number }

    Compila limpio

    Con ella encendida

    "verbatimModuleSyntax": true

    main.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