必须只装 solidjs-community.solid-js-vscode 插件并配置 tsconfig.json 的 "jsx": "preserve" 和 "jsximportsource": "solid-js",再重启 ts server;装错插件或配置缺失会导致 jsx 不高亮、createsignal 灰色、onmount 报“未定义”。

Solid.js 在 VSCode 里没提示、JSX 不高亮、createSignal 灰色、onMount 报“未定义”——90% 是插件装错或 tsconfig.json 配置不全,不是环境没装好,也不是代码写错了。
必须只装 solidjs-community.solid-js-vscode 插件
VSCode 搜索 “SolidJS” 会列出一堆插件,但只有 solidjs-community.solid-js-vscode 是当前唯一有效、官方社区维护的。它支持 createMemo、createStore、<show></show>、<for></for> 全套 API 和 JSX 类型推导。
其他插件全是干扰源:
-
solidjs.solidjs已废弃,不支持 TSX 和 Solid v2+,装了反而让createEffect标红 - Volar 的 Solid 分支是 Vue 专用 LSP 的魔改版,强行启用会导致 JSX 解析错乱
- 任何带 “prettier-plugin-solid” 字样的插件都别装——它已合并进
esbenp.prettier-vscode,重复安装会冲突
操作建议:打开扩展面板 → 搜索 “solidjs-community” → 安装 → 卸载所有其他 Solid 相关插件 → 重启 VSCode。
tsconfig.json 必须同时配 "jsx": "preserve" 和 "jsxImportSource": "solid-js"
VSCode 默认把 .tsx 当 React 处理,不显式声明 Solid 的 JSX 工厂,TypeScript 语言服务就“看不见”你的响应式函数。
这两个字段缺一不可,且值必须严格匹配:
-
"jsx": "preserve":告诉 TS 别碰 JSX,留给@solidjs/vite-plugin-solid编译;设成"react"或"react-jsx"会触发 React 类型检查,直接导致React is not defined错误 -
"jsxImportSource": "solid-js":必须是这个字符串,不能写成"solid-js/web"或加路径;否则createMemo悬停无签名、<switch></switch>标签不着色
如果项目用 JS(jsconfig.json),同样要加这两项——JS 项目不支持 types 字段,但 JSX 相关配置依然生效。
改完配置后必须手动重启 TypeScript Server
VSCode 不会自动重载 TS 语言服务。哪怕你刚装完插件、刚保存 tsconfig.json,不重启就是白忙活。
快捷操作:
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS) - 输入
Restart TS server→ 回车执行
验证是否生效:
- 打开任意
.tsx文件,把光标停在createEffect上,看是否有完整函数签名提示 - 输入
<div>,确认标签有颜色而非纯白;输入 <code><show></show>,确认首字母大写且高亮如果仍无效,检查项目根目录是否存在
tsconfig.json或jsconfig.json——没有这个文件,插件根本无法推导类型。文件语言模式可能被自动切换,需手动锁定
VSCode 是按内容识别语言模式:只要文件里出现
createSignal()或<for></for>,插件就会激活 Solid 模式——哪怕你打开的是index.tsx,而项目其实是 React。后果很直接:React 的
useState突然不提示,useEffect被标黄,这不是 bug,是插件按规则工作的副作用。解决办法:
- 右下角点击当前语言标签(如 “TypeScript React”)
- 选
Configure File Association for '*.tsx' - 设为
typescriptreact(纯 React 项目)或typescript(无 JSX 框架项目)
这个设置会写入
.vscode/settings.json,只对当前项目生效,不影响其他项目。复杂点在于:Solid 插件的激活逻辑是“内容驱动”,不是“后缀驱动”,所以混用框架时,语言模式容易悄悄漂移。











