Language-tools: Псевдоним не разрешен

Созданный на 20 авг. 2020  ·  10Комментарии  ·  Источник: sveltejs/language-tools

Опишите ошибку
Я использовал псевдоним импорта @/ и это сработало. Затем я переключился на Vite, и он поддерживает только корневые псевдонимы. Поэтому я переключил свой код на использование псевдонимов /@/ . Он компилируется и работает в браузере, но выдает ошибку в vscode:

image

Воспроизводить
Используйте /@/ import

Ожидаемое поведение
Все работает

Система (пожалуйста, заполните следующую информацию):

  • ОС: Ubuntu
  • IDE: VSCode
  • Плагин / Пакет: «Svelte для VSCode»
Fixed bug question

Самый полезный комментарий

Проблема находится внутри нашего module-loader , который делегирует нормальное разрешение TS, потому что проверка "является абсолютным путем" истинна (пути к файлам, начинающиеся с / являются абсолютными в linux). Я думаю, нам нужны дополнительные проверки на предмет «является ли этот префикс частью путей tsconfig».

Все 10 Комментарий

Вам также необходимо настроить псевдоним для машинописного текста, хотя tsconfig / jsconfig.json

https://www.typescriptlang.org/docs/handbook/module-resolution.html#path -mapping

Я также сталкиваюсь с той же проблемой, что tsc может легко скомпилировать. Однако такие инструменты, как svelte-check , не смогут правильно разрешить путь псевдонима и выдают ошибки, такие как OP. Кажется, есть ошибка, связанная с тем, что language-tools не может правильно разрешить tsconfig.json в папке проекта?

Screenshot 2020-08-21 at 13 06 57

Эта ошибка вызвана тем, что мы использовали какое-то специальное свойство, введенное svelte2tsx для проверки типа компонента. Если мы не можем найти фактический файл, мы не сможем преобразовать его с помощью svelte2tsx.

@cayter куда ты ставишь свой tsconfig?

@ jasonlyu123 Ниже представлена ​​структура папок моего проекта, которая является монорепозиторием как для внутреннего, так и для внешнего интерфейса:

.
├── 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

хостинг / 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/*"]
}

Если мы не можем найти фактический файл, мы не сможем преобразовать его с помощью svelte2tsx.

Да, это относится к разрешению пути псевдонима, определенному в tsconfig.json проекта. ComboBox .

Можете ли вы проверить выходной канал vscode, выберите svelte в раскрывающемся списке справа. И посмотрите, есть ли у вас что-то подобное
Initialize new ts service at c:/Current Projects/svelte-app/tsconfig.json и опубликуйте журнал здесь.

Я могу воспроизвести это. По какой-то причине getDefinitionAndBoundSpan может работать с файлами TS / JS, импортированными из таких мест, но не с файлами .svelte .

Проблема находится внутри нашего module-loader , который делегирует нормальное разрешение TS, потому что проверка "является абсолютным путем" истинна (пути к файлам, начинающиеся с / являются абсолютными в linux). Я думаю, нам нужны дополнительные проверки на предмет «является ли этот префикс частью путей tsconfig».

OP на самом деле сказал, что работает с @/ и я пропустил это. Извини

Я забыл сказать, какие вы классные ребята. Спасибо за быстрый ответ

Была ли эта страница полезной?
0 / 5 - 0 рейтинги