Language-tools: Alias ​​tidak diselesaikan

Dibuat pada 20 Agu 2020  Β·  10Komentar  Β·  Sumber: sveltejs/language-tools

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:

image

Untuk Mereproduksi
Gunakan /@/ import

Perilaku yang diharapkan
Semuanya bekerja

Sistem (lengkapi informasi berikut):

  • OS: Ubuntu
  • IDE: VSCode
  • Plugin / Paket: "Svelte untuk VSCode"
Fixed bug question

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".

Semua 10 komentar

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?

Screenshot 2020-08-21 at 13 06 57

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat