只需安装官方“Svelte for VS Code”扩展,配置tsconfig.json和svelte.config.js并启用svelte-check,才能实现完整类型提示、路径别名解析和指令补全。

装对扩展:Svelte for VS Code 是唯一必需的
VS Code 默认不识别 .svelte 文件,语法全靠扩展撑。别装“Svelte Language Server”或“Svelte Intellisense”这类过时/重复扩展——它们要么已合并进主扩展,要么会和主扩展冲突导致补全失效、Ctrl+Click 跳转失败。
只装一个:Svelte for VS Code(作者:Svelte 官方团队,ID:svelte.svelte-vscode)。它自带语言服务器、语法高亮、类型推导、$lib 路径解析、bind: / on: 指令提示等全部基础能力。
- 安装后重启 VS Code,打开任意
.svelte文件,状态栏右下角应显示Svelte(不是Plain Text或HTML) - 如果仍显示为 HTML,右键文件 → “Change Language Mode” → 选
Svelte,再点右下角齿轮 → “Configure File Association for '.svelte'” → 绑定到svelte - 禁用所有其他 Svelte 相关扩展,尤其带“IntelliSense”“LS”字样的第三方插件
项目里必须有 svelte-check 和 typescript 支持
光靠扩展只能做基础高亮;真正可靠的类型提示、组件 props 补全、$$Props 推导,依赖项目本地的 svelte-check 和 typescript 配置。没有它们,VS Code 会反复报“Cannot find name '$props'”或补全列表为空。
确保项目根目录有:
-
tsconfig.json(哪怕只是空对象{},也比没有强;推荐用npx svelte-add@latest typescript初始化) -
svelte.config.js存在且导出有效配置(最简版:module.exports = { compilerOptions: { dev: true } };) - 运行过
npm install --save-dev svelte-check typescript,并执行过npx svelte-check --init
常见错误现象:on:click 补全不出来、export let name: string 后面没类型提示、<Child {name} /> 中 name 下划红线但无具体错误——基本都是缺 svelte-check 或 tsconfig.json 未被识别。
别忽略 svelte.config.js 的 resolve.alias 配置
如果你用了 $lib 或自定义别名(如 $components),VS Code 补全路径时会卡住:输入 import Comp from '$lib/ 按 Tab 没反应,或跳转到错误文件。这是因为扩展默认不读取 svelte.config.js 里的别名,得手动告诉 TypeScript。
在 tsconfig.json 的 compilerOptions 里加 baseUrl 和 paths:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"$lib/*": ["src/lib/*"],
"$components/*": ["src/components/*"]
}
}
}
改完保存,然后在 VS Code 里按 Cmd+Shift+P(Mac)或 Ctrl+Shift+P(Win/Linux)→ 输入 “TypeScript: Restart TS server”。不重启,新路径不会生效。
遇到补全延迟或崩溃?先关掉 eslint-plugin-svelte
很多用户装了 eslint-plugin-svelte 并启用 eslint.enable,结果 VS Code 编辑器卡顿、补全变慢、甚至弹出 “Language Server crashed” 错误。这不是 Svelte 扩展的问题,而是 ESLint 在每次按键时都尝试解析 Svelte 文件结构,和语言服务器抢资源。
临时解决办法(开发时推荐):
- 关闭 ESLint 插件:设置里搜
eslint.enable,设为false - 或只对
.js/.ts启用 ESLint,在settings.json加:"eslint.validate": ["javascript", "typescript"],去掉"svelte" - 真要检查 Svelte 文件,用命令行跑
npx svelte-check,不走编辑器实时校验
复杂点在于:Svelte 的响应式声明($:)、$$Props、$$Slots 这些是编译期注入的类型,TS 本身不理解,全靠 svelte-check 和扩展协作推导。少一个环节,补全就断链——所以别图省事跳过 tsconfig.json 或 svelte.config.js 的配置。


















