Describe el error
Usé el alias de importación @/
y funcionó. Luego cambié a Vite y solo admite alias de root. Así que cambié mi código para usar los alias /@/
. Se compila y funciona en el navegador, pero me da un error en vscode:
Reproducir
Utilice /@/
importación
Comportamiento esperado
Todo funciona
Sistema (complete la siguiente información):
También tendrá que configurar el alias para mecanografiado a través de tsconfig / jsconfig.json
https://www.typescriptlang.org/docs/handbook/module-resolution.html#path -mapping
También estoy enfrentando el mismo problema que tsc
puede compilarlo bien. Sin embargo, herramientas como svelte-check
no podrán resolver la ruta de alias correctamente y arrojar errores como OP. ¿Parece que hay un error relacionado con language-tools
no se puede resolver correctamente tsconfig.json
en la carpeta del proyecto?
Ese error se debe a que hemos utilizado alguna propiedad especial inyectada por svelte2tsx para realizar la verificación del tipo de componente. Si no podemos encontrar el archivo real, no podemos transformar el archivo usando svelte2tsx.
@cayter ¿dónde pones tu tsconfig?
@ jasonlyu123 A continuación se muestra la estructura de la carpeta de mi proyecto, que resulta ser un monorepo tanto para el backend como para el 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/*"]
}
Si no podemos encontrar el archivo real, no podemos transformar el archivo usando svelte2tsx.
Sí, esto es relevante para la resolución de la ruta de alias definida en el tsconfig.json
que no se está respetando. Entonces, si lo cambiamos a una ruta relativa en lugar de usar una ruta de alias, la extensión vscode y svelte-check ya no arrojarán ningún error que puede ver en la captura de pantalla de OP para el componente ComboBox
.
¿Puede verificar el canal de salida de vscode? Elija svelte en el menú desplegable de la derecha. Y mira si tienes algo como esto
Initialize new ts service at c:/Current Projects/svelte-app/tsconfig.json
y publique el registro aquí.
Puedo reproducir esto. Por alguna razón, getDefinitionAndBoundSpan
puede tratar con archivos TS / JS importados desde dichas ubicaciones, pero no con archivos .svelte
.
El problema está dentro de nuestro module-loader
, que delega a la resolución TS normal porque la verificación de "es ruta absoluta" es verdadera (las rutas de archivo que comienzan con /
son absolutas en Linux). Creo que necesitamos comprobaciones adicionales para "¿este prefijo forma parte de las rutas tsconfig".
OP en realidad dijo que funciona con @/
y me lo perdí. Lo siento 😅
Olvidé decirles lo increíbles que son ustedes. gracias por responder rápido
Comentario más útil
El problema está dentro de nuestro
module-loader
, que delega a la resolución TS normal porque la verificación de "es ruta absoluta" es verdadera (las rutas de archivo que comienzan con/
son absolutas en Linux). Creo que necesitamos comprobaciones adicionales para "¿este prefijo forma parte de las rutas tsconfig".