Language-tools: El alias no está resuelto

Creado en 20 ago. 2020  ·  10Comentarios  ·  Fuente: sveltejs/language-tools

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:

image

Reproducir
Utilice /@/ importación

Comportamiento esperado
Todo funciona

Sistema (complete la siguiente información):

  • SO: Ubuntu
  • IDE: VSCode
  • Complemento / Paquete: "Svelte para VSCode"
Fixed bug question

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

Todos 10 comentarios

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?

Screenshot 2020-08-21 at 13 06 57

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

¿Fue útil esta página
0 / 5 - 0 calificaciones