You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:39:20