javascript - Ne može se izvesti Interface u Typescriptu - traženi modul ne pruža izvoz pod nazivom Settings
Pokušavam izvesti/uvoziti sučelje u Typescriptu, ali dobivam ovu pogrešku, nisam siguran što radim krivo
Nesatoshi SyntaxError: Zahtjevani modul '/src/types/settings.ts' ne pruža izvoz pod nazivom 'Settings'
U mom types/settings.ts imam ovo
export interface Settings {
activeUser: number
}
I uvozim ga ovako
import { Settings } from '@/types/settings'
I ovdje je moj tsconfig.json
{
"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"]
}
Koristim Vue/Vite s Typescriptom
Odgovor #1
Najvjerojatnije problem uvoza sučelja bez njihovog izričitog označavanja kao tip. Vite zahtijeva da isolatedModules bude true, što zauzvrat zahtijeva rukovanje sučeljima na ovaj način:
interface IFoo { bar: string; }
export type { IFoo };
Imajte na umu, ako koristite datoteke bačve (index.ts) koje izgledaju ovako:
export { IFoo } from './foo';
trebao bi ih pretvoriti da budu ovakvi umjesto:
export * from './foo';
ili ovako
import type { IFoo } from "./foo";
export type { IFoo };
Još jedna prljava opcija je postaviti skipLibCheck na true u tsconfig.json, što će ipak smanjiti vašu strogoću tipova.
Odgovor #2
Čudno je što npm run build radi bez problema, ali npm run dev baca SyntaxError.
Bio sam prisiljen koristiti import type { ..., što je posljedično također zahtijevalo isti pristup za Ref iz vue.
Zaobilazno rješenje objavljeno je na GitHubu za Vite problem 731
