描述错误
我使用了导入别名@/
并且它起作用了。 然后我切换到Vite,它仅支持根别名。 所以我切换了代码以使用/@/
别名。 它可以在浏览器中编译和工作,但是在vscode中给我一个错误:
重现
使用/@/
导入
预期行为
一切正常
系统(请完成以下信息):
您还必须通过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下面是我的项目文件夹结构,恰好是后端/前端的monorepo:
.
├── 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
定义的别名路径解析有关。 因此,如果我们将其更改为相对路径而不是使用别名路径,则vscode扩展名和svelte-check将不再抛出任何错误,您可以从OP的ComboBox
组件屏幕截图中看到该错误。
您可以检查vscode的输出通道吗,在右侧的下拉菜单中选择了svelte。 看看你是否有这样的东西
Initialize new ts service at c:/Current Projects/svelte-app/tsconfig.json
并在此处发布日志。
我可以重现这一点。 由于某些原因, getDefinitionAndBoundSpan
可以处理从此类位置导入的TS / JS文件,但不能处理.svelte
文件。
问题出在我们的module-loader
,它代表正常的TS分辨率,因为对“ is absolute path”的检查是正确的(在Linux中,以/
开头的文件路径是绝对的)。 我认为我们需要对“此前缀是tsconfig路径的一部分”进行更多检查。
OP实际上说它可以与@/
,但我错过了。 对不起😅
我忘了说你们有多厉害。 谢谢您的快速回复
最有用的评论
问题出在我们的
module-loader
,它代表正常的TS分辨率,因为对“ is absolute path”的检查是正确的(在Linux中,以/
开头的文件路径是绝对的)。 我认为我们需要对“此前缀是tsconfig路径的一部分”进行更多检查。