javascript - Nu se poate exporta Interfața în Typescript - modulul cerut nu oferă un export numit Settings


Încerc să export/import o interfață în Typescript, dar primesc această eroare, nu sunt sigur ce fac greșit aici

Eroare de sintaxă nezăluită: Modulul solicitat '/src/types/settings.ts' nu oferă un export numit 'Settings'

În fișierul meu types/settings.ts am asta

export interface Settings {
    activeUser: number
}

Și îl import astfel

import { Settings } from '@/types/settings'

Și aici este tsconfig.json al meu

{
  "compilerOptions": {
    "target": "esnext",
    "baseUrl": "./src/",
    "useDefineForClassFields": true,
    "module": "esnext",
    "moduleResolution": "node",
    "strict": true,
    "jsx": "preserve",
    "paths": {
      "@/*": ["src/*"],
    },
    "sourceMap": true,
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "lib": ["esnext", "dom"],
    "isolatedModules": false
  },

  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}

Folosesc Vue/Vite cu Typescript

Răspuns #1

Cel mai probabil o problemă de importare a interfețelor fără a le marca explicit ca tip. Vite necesită ca isolatedModules să fie adevărat, ceea ce la rândul său necesită gestionarea interfețelor în acest mod:

interface IFoo { bar: string; }
export type { IFoo };

Țineți minte, dacă folosiți fișiere tip barrel (index.ts) care arată astfel:

export { IFoo } from './foo';

ar trebui să le convertești să fie în felul acesta în schimb:

export * from './foo';

sau așa

import type { IFoo } from "./foo";
export type { IFoo };

O altă opțiune murdară este să setezi skipLibCheck la true în tsconfig.json, ceea ce va reduce însă strictetea tipurilor tale.

Răspunsul #2

Este ciudat că npm run build funcționează bine, dar npm run dev aruncă o eroare de sintaxă (SyntaxError).

Am fost forțat să folosesc import type { ... care, în consecință, a necesitat aceeași modificare și pentru Ref din vue.

O soluție provizorie a fost postată pe GitHub pentru problema Vite 731