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
