React 19中shadcn/ui Button组件的TypeScript错误修复问询
修复React 19 + shadcn/ui(Canary)中的Radix Slot TypeScript类型错误
这个错误的核心原因是React 19的@types/react更新了ReactNode类型,新增了bigint作为合法类型,但旧版@radix-ui/react-slot(1.1.2)的类型定义还未适配这一变化,导致跨包类型不兼容。以下是几种可行的修复方案:
方案1:升级Radix UI Slot到适配React 19的预览版本
直接安装@radix-ui/react-slot的canary版本,该版本已经针对React 19的类型系统做了适配:
pnpm add @radix-ui/react-slot@canary
方案2:手动添加类型兼容声明(临时 workaround)
在项目根目录创建types/react.d.ts文件,手动扩展ReactNode类型以兼容Radix的旧类型定义:
declare module 'react' { export type ReactNode = | ReactChild | ReactFragment | ReactPortal | boolean | null | undefined | bigint; // 补上React 19新增的bigint类型 } export {};
然后在tsconfig.json的include数组中添加该类型文件,确保TypeScript能识别:
{ "include": [ "src/**/*", "./types/**/*.d.ts" ] }
方案3:统一React类型导入
检查生成的shadcn/ui Button组件代码,确保所有React相关的类型都从react包直接导入,避免混用@types/react的导入:
// 错误示例 import type { RefAttributes } from '@types/react'; // 正确示例 import type { RefAttributes } from 'react';
方案4:清除缓存并重新安装依赖
pnpm的缓存可能保留了旧的类型文件,执行以下命令彻底刷新依赖:
pnpm store prune pnpm install
内容的提问来源于stack exchange,提问作者IvonaK
相关产品推荐
相关产品推荐

