根本原因是语言服务未正确识别文件类型或加载类型定义。需确保右下角为typescript react模式、tsconfig.json含"jsx": "react-jsx"且开启strict、显式声明props接口,并重启ts server。

VSCode 为什么看不到 React 组件的 props 提示?
根本原因不是插件没装够,而是语言服务没“认对文件”或“没加载类型”。javascriptreact 模式只做语法高亮和基础 ESLint,不启动 TypeScript 语言服务器(LSP);哪怕你写的是 .tsx 文件,如果 tsconfig.json 缺失或 "jsx" 配错,VSCode 就会退化成 JS 模式,props 提示直接消失。
常见错误现象:Property 'title' does not exist on type 'IntrinsicAttributes'、输入 <mycomponent> 后无任何属性补全、<code>useState 返回值显示为 any。
- 检查当前文件右下角语言模式:必须是
TypeScript React(.tsx)或JavaScript React(.jsx),不是JavaScript或TypeScript - 确认项目根目录存在
tsconfig.json,且含"jsx": "react-jsx"(TSX 项目)或"allowJs": true+"checkJs": true(JSX 项目) - 运行命令面板
Ctrl+Shift+P→ 输入TypeScript: Select TypeScript Version→ 选Use Workspace Version,避免 VSCode 用内置旧版 TS
tsconfig.json 关键配置项怎么写才生效?
tsconfig.json 不是摆设,它直接决定 VSCode 能否推导出组件 props 类型。尤其注意三个字段的组合效果:
-
"jsx": "react-jsx":必须,否则 JSX 不被识别为合法语法,React.FC等类型无法绑定 -
"strict": true:开启后,Props接口里漏写必填字段、children类型不显式声明,都会立刻报错并阻止补全 -
"types": ["react", "react-dom"]:确保React.ReactNode、React.HTMLAttributes等基础类型可解析;若用 Vite 或 Next.js,默认可能不包含,需手动加
错误示范:"jsx": "preserve" 在现代项目中会导致类型服务降级,props 补全变弱甚至失效。
Props 类型定义写在哪、怎么写才能被识别?
VSCode 的 props 提示只认两种写法:显式接口/类型声明 + 正确的函数签名。它不会从 JSX 结构反推,也不会读 defaultProps 推断可选性。
- 推荐写法:
interface Props { title: string; children?: React.ReactNode; }+const MyComponent: React.FC<props> = ({ title, children }) => { ... }</props> - 避免写法:
const MyComponent = ({ title }: { title: string }) => { ... }—— 这种内联类型在某些嵌套场景下会丢失补全 - 别依赖
defaultProps:TS 已废弃对它的类型支持,title?: string和title: string+defaultProps是两回事,后者不会让提示变宽松 - 扩展 HTML 属性时,用
interface Props extends React.HTMLAttributes<htmldivelement> { ... }</htmldivelement>,而不是手写onClick?: () => void,否则事件类型不完整
为什么改了配置还是没提示?重启和重载的区别
VSCode 不会自动重载 TypeScript 语言服务,改完 tsconfig.json 或 .vscode/settings.json 后,90% 的“没提示”问题都卡在这一步。
- 先试快捷操作:
Ctrl+Shift+P→ 输入Developer: Restart TS Server(比关窗口快得多) - 如果仍无效,再执行:
Ctrl+Shift+P→Developer: Toggle Developer Tools→ 控制台里搜semantic error或no program,确认 TS Server 是否已加载项目 - 极端情况:删掉
node_modules/.cache/typescript和./.vscode/tsconfig.tsbuildinfo,再重启 TS Server —— 缓存错位会导致类型服务静默失败
最常被忽略的细节:files.associations 配置没生效,导致 .tsx 文件被当成普通 TypeScript 处理,JSX 片段完全不参与类型推导。











