Опишите ошибку
Я использовал псевдоним импорта @/
и это сработало. Затем я переключился на Vite, и он поддерживает только корневые псевдонимы. Поэтому я переключил свой код на использование псевдонимов /@/
. Он компилируется и работает в браузере, но выдает ошибку в vscode:
Воспроизводить
Используйте /@/
import
Ожидаемое поведение
Все работает
Система (пожалуйста, заполните следующую информацию):
Вам также необходимо настроить псевдоним для машинописного текста, хотя tsconfig / jsconfig.json
https://www.typescriptlang.org/docs/handbook/module-resolution.html#path -mapping
Я также сталкиваюсь с той же проблемой, что tsc
может легко скомпилировать. Однако такие инструменты, как svelte-check
, не смогут правильно разрешить путь псевдонима и выдают ошибки, такие как OP. Кажется, есть ошибка, связанная с тем, что language-tools
не может правильно разрешить tsconfig.json
в папке проекта?
Эта ошибка вызвана тем, что мы использовали какое-то специальное свойство, введенное 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 на самом деле сказал, что работает с @/
и я пропустил это. Извини
Я забыл сказать, какие вы классные ребята. Спасибо за быстрый ответ
Самый полезный комментарий
Проблема находится внутри нашего
module-loader
, который делегирует нормальное разрешение TS, потому что проверка "является абсолютным путем" истинна (пути к файлам, начинающиеся с/
являются абсолютными в linux). Я думаю, нам нужны дополнительные проверки на предмет «является ли этот префикс частью путей tsconfig».