TypeScript TS2322报错:ComponentType属性不存在于IntrinsicAttributes
问题产生原因
报错核心是resultType的类型定义过于宽泛:
React内置的ComponentType是泛型类型,当你不传入泛型参数直接写ComponentType时,TS会默认推导该组件支持的Props只有IntrinsicAttributes——这是React为组件/原生元素定义的基础内置属性类型,不包含任何业务自定义属性。此时你给动态组件传入className、item、Callback等自定义属性时,TS静态检查就会判定这些属性不合法,抛出对应错误。
代码能正常运行是因为TS类型检查仅在编译阶段生效,React运行时不会校验传入组件的props是否匹配类型定义,因此实际渲染逻辑不受影响。
最小改动解决方案
不需要调整现有业务逻辑,只需要补全ComponentType的泛型定义即可消除报错,有两种可选方案:
- 成本最低的快速修复:直接将
resultType的类型从ComponentType改为ComponentType<any>,TS会允许你给该动态组件传入任意属性,不会再触发类型报错,完全不改变现有运行效果。
修改后的Props类型示例:type Props = { arraySource: Array<{}>, // 仅修改这一行即可 resultType: ComponentType<any>, resultStyleName: string; Callback: (tagsChecked : Array<string>) => void; }; - 如果需要保留类型校验能力,可以先定义动态组件需要接收的Props结构,再作为泛型参数传给
ComponentType:// 定义动态组件接收的props类型 type DynamicCompProps = { className?: string; item: {}; Callback: {}; getCallback: (value: any, name: string) => Promise<any>; } type Props = { arraySource: Array<{}>, // 传入精确的props泛型 resultType: ComponentType<DynamicCompProps>, resultStyleName: string; Callback: (tagsChecked : Array<string>) => void; };
内容的提问来源于stack exchange,提问作者Mazout Mazout
相关产品推荐
相关产品推荐

