Búsqueda de sitios web

svelte - ¿Importar interfaces de TypeScript en SvelteKit?


Tengo un proyecto inicial de SvelteKit. Estoy tratando de reutilizar una interfaz en varios lugares.

El archivo está ubicado en /src/lib/choice.ts.

export interface Choice {
    id: number;
    value: string;
}

Sin embargo, cuando intento referenciar esta interfaz en un componente de Svelte de la siguiente manera:

<script lang="ts">
    import {Choice} from "$lib/choice";
</script>

Obtengo este error:

500
The requested module '/src/lib/choice.ts' does not provide an export named 'Choice'
SyntaxError: The requested module '/src/lib/choice.ts' does not provide an export named 'Choice'

Sin embargo, mi IDE cree que esto es perfectamente válido, incluso hasta permitir la navegación por clic a la declaración de Choice.

Sin embargo, si cambio la declaración a esto:

export class Choice {
    id!: number;
    value!: string;
}

Todo funciona y mi IDE está contento.

¿Qué está pasando aquí? No entiendo por qué la interfaz no funciona pero la declaración de la clase sí.

Respuesta #1

Es posible que tengas que anotar esto como una importación de tipo:

import type { Choice } from "$lib/choice";

Si miras el tsconfig.json predeterminado de SvelteKit, hay una explicación:

{
  "compilerOptions": {
    // this ensures that types are explicitly
    // imported with `import type`, which is
    // necessary as svelte-preprocess cannot
    // otherwise compile components correctly
    "importsNotUsedAsValues": "error",

Artículos relacionados