Descreva o bug
Usei o alias de importação @/
e funcionou. Então mudei para o Vite e ele suporta apenas aliases de raiz. Então mudei meu código para usar /@/
aliases. Ele compila e funciona no navegador, mas me dá um erro no vscode:
Reproduzir
Use /@/
import
Comportamento esperado
Tudo funciona
Sistema (preencha as seguintes informações):
Você também terá que configurar o alias para typescript embora tsconfig / jsconfig.json
https://www.typescriptlang.org/docs/handbook/module-resolution.html#path -mapping
Também estou enfrentando o mesmo problema de que tsc
pode compilá-lo perfeitamente. No entanto, ferramentas como svelte-check
não serão capazes de resolver o caminho do alias corretamente e lançar erros como OP. Parece que há um bug relacionado ao fato de language-tools
não conseguir resolver tsconfig.json
na pasta do projeto corretamente?
Esse erro ocorre porque usamos algumas propriedades especiais injetadas por svelte2tsx para fazer a verificação de tipo de componente. Se não conseguirmos encontrar o arquivo real, não podemos transformá-lo usando svelte2tsx.
@cayter onde você coloca seu tsconfig?
@ jasonlyu123 Abaixo está a estrutura de pastas do meu projeto, que é um monorepo para 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/*"]
}
Se não conseguirmos encontrar o arquivo real, não podemos transformá-lo usando svelte2tsx.
Sim, isso é relevante para a resolução do caminho do alias definido no projeto tsconfig.json
não está sendo honrado. Portanto, se mudarmos para o caminho relativo em vez de usar o caminho alternativo, a extensão vscode e a verificação svelte não irão gerar mais nenhum erro que você pode ver na captura de tela do OP para o componente ComboBox
.
Você pode verificar o canal de saída do vscode, escolha svelte no menu suspenso à direita. E veja se você tem algo assim
Initialize new ts service at c:/Current Projects/svelte-app/tsconfig.json
e poste o log aqui.
Eu posso reproduzir isso. Por alguma razão, getDefinitionAndBoundSpan
pode lidar com arquivos TS / JS importados de tais locais, mas não com arquivos .svelte
.
O problema está dentro de nosso module-loader
, que delega para a resolução TS normal porque a verificação de "é o caminho absoluto" é verdadeira (caminhos de arquivo começando com /
são absolutos no Linux). Acho que precisamos de verificações adicionais para "este prefixo faz parte dos caminhos tsconfig".
OP realmente disse que funciona com @/
e eu perdi isso. Desculpe 😅
Eu esqueci de dizer o quão incrível vocês são. Obrigado pela resposta rápida
Comentários muito úteis
O problema está dentro de nosso
module-loader
, que delega para a resolução TS normal porque a verificação de "é o caminho absoluto" é verdadeira (caminhos de arquivo começando com/
são absolutos no Linux). Acho que precisamos de verificações adicionais para "este prefixo faz parte dos caminhos tsconfig".