Jelaskan bugnya
Saya menggunakan alias impor @/
dan berhasil. Kemudian saya beralih ke Vite dan hanya mendukung alias root. Jadi saya mengganti kode saya untuk menggunakan /@/
alias. Ini mengkompilasi dan bekerja di browser, tetapi memberi saya kesalahan dalam vscode:
Untuk Mereproduksi
Gunakan /@/
import
Perilaku yang diharapkan
Semuanya bekerja
Sistem (lengkapi informasi berikut):
Anda juga harus mengkonfigurasi alias untuk skrip ketikan melalui tsconfig / jsconfig.json
https://www.typescriptlang.org/docs/handbook/module-resolution.html#path -mapping
Saya juga menghadapi masalah yang sama dimana tsc
dapat mengkompilasinya dengan baik. Namun, alat seperti svelte-check
tidak akan dapat menyelesaikan jalur alias dengan benar dan memunculkan kesalahan seperti OP. Sepertinya ada bug yang terkait dengan language-tools
tidak dapat menyelesaikan tsconfig.json
dalam folder proyek dengan benar?
Kesalahan itu karena kita telah menggunakan beberapa properti khusus yang diinjeksi oleh svelte2tsx untuk melakukan pemeriksaan tipe komponen. Jika kami tidak dapat menemukan file sebenarnya, kami tidak dapat mengubah file menggunakan svelte2tsx.
@Cayter di mana Anda meletakkan tsconfig Anda?
@ jasonlyu123 Di bawah ini adalah struktur folder proyek saya yang kebetulan merupakan monorepo untuk kedua backend / frontend:
.
βββ Makefile
βββ README.md
βββ database
β βββ database.rules.json
βββ firebase.json
βββ firestore
β βββ firestore.indexes.json
β βββ firestore.rules
βββ functions // backend code
β βββ package-lock.json
β βββ package.json
β βββ src
β β βββ index.ts
β βββ tsconfig.json
βββ hosting // frontend PWA code
β βββ ...
β βββ src
β β βββ components
β β β βββ App.svelte
β β β βββ ...
β β βββ images
β β β βββ cover.png
β β β βββ ...
β β βββ index.css
β β βββ index.ts
β β βββ pages
β β β βββ Auth
β β β β βββ ...
β β β βββ Error
β β β β βββ ...
β β β βββ Home
β β β β βββ ...
β β β βββ User
β β β βββ ...
β β βββ stores
β β βββ ...
β βββ svelte.config.js
β βββ tailwind.config.js
β βββ tsconfig.json
β βββ vite.config.ts
β βββ workbox.config.js
βββ package-lock.json
βββ package.json
hosting / tsconfig.json
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"baseUrl": "src",
"declaration": true,
"emitDecoratorMetadata": true,
"esModuleInterop": true,
"experimentalDecorators": true,
"forceConsistentCasingInFileNames": true,
"importHelpers": true,
"importsNotUsedAsValues": "error",
"isolatedModules": true,
"lib": ["dom", "esnext", "es6"],
"module": "esnext",
"moduleResolution": "node",
"noEmit": true,
"noImplicitAny": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"rootDir": "src",
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"strictBindCallApply": true,
"strictFunctionTypes": true,
"strictPropertyInitialization": true,
"strictNullChecks": true,
"target": "esnext",
"types": ["jest", "node", "svelte"],
"paths": {
"/@/*": ["*"]
}
},
"include": ["src/**/*"],
"exclude": ["node_modules/*", "public/*"]
}
Jika kami tidak dapat menemukan file sebenarnya, kami tidak dapat mengubah file menggunakan svelte2tsx.
Ya, ini relevan dengan penyelesaian path alias yang ditentukan dalam proyek tsconfig.json
tidak dihormati. Jadi, jika kita mengubahnya menjadi jalur relatif daripada menggunakan jalur alias, ekstensi vscode dan svelte-check tidak akan memunculkan kesalahan lagi yang dapat Anda lihat dari tangkapan layar OP untuk komponen ComboBox
.
Bisakah Anda memeriksa saluran keluaran vscode, pilih svelte di dropdown di sebelah kanan. Dan lihat apakah Anda memiliki sesuatu seperti ini
Initialize new ts service at c:/Current Projects/svelte-app/tsconfig.json
dan posting lognya di sini.
Saya bisa mereproduksi ini. Untuk beberapa alasan getDefinitionAndBoundSpan
dapat menangani file TS / JS yang diimpor dari lokasi tersebut, tetapi tidak dengan file .svelte
.
Masalahnya ada di dalam module-loader
, yang mendelegasikan resolusi TS normal karena pemeriksaan "is absolute path" adalah benar (path file yang dimulai dengan /
adalah absolut di linux). Saya pikir kita perlu pemeriksaan tambahan untuk "apakah awalan ini bagian dari jalur tsconfig".
OP sebenarnya mengatakan itu berfungsi dengan @/
dan saya melewatkannya. Maaf π
Saya lupa mengatakan betapa hebatnya kalian. Terima kasih atas tanggapannya yang cepat
Komentar yang paling membantu
Masalahnya ada di dalam
module-loader
, yang mendelegasikan resolusi TS normal karena pemeriksaan "is absolute path" adalah benar (path file yang dimulai dengan/
adalah absolut di linux). Saya pikir kita perlu pemeriksaan tambahan untuk "apakah awalan ini bagian dari jalur tsconfig".