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

使用vite-plugin-svgr添加ReactComponent props遇TS类型错误求助

解决SVG React组件TypeScript类型错误问题

以下是针对你遇到的「类型无法赋值给类型‘IntrinsicAttributes’」错误的几种可行解决方法:

  • 修正tsconfig.json的types配置
    确保types字段是数组格式(而非单个字符串),正确配置应为:

    {
      "compilerOptions": {
        "types": ["vite-plugin-svgr/client"]
      }
    }
    

    单个字符串格式可能导致TS无法正确识别插件提供的类型定义。

  • 显式指定组件类型
    由于默认导出的类型推导可能存在问题,手动为导入的SVG组件指定正确的React组件类型:

    import React from "react";
    import Icon from "./path";
    
    // 断言为支持SVG所有原生props的React函数组件
    const TypedIcon = Icon as React.FC<React.SVGProps<SVGSVGElement>>;
    
    // 使用时直接传props即可
    function App() {
      return <TypedIcon width={24} color="#fff" />;
    }
    
  • 改用命名导入方式
    修改vite.config.ts中的exportAsDefault为false:

    svgr({
      exportAsDefault: false,
      svgrOptions: {
        icon: true,
      },
    })
    

    然后用命名导入获取React组件,TS会自动识别正确类型:

    import { ReactComponent as Icon } from "./path";
    
    // 直接使用并传递props
    <Icon height={32} fill="blue" />
    
  • 手动添加全局类型声明
    如果上述方法都无效,在项目根目录新建src/svg.d.ts文件,添加自定义SVG类型声明:

    declare module "*.svg" {
      import React from "react";
      const ReactComponent: React.FC<React.SVGProps<SVGSVGElement>>;
      export default ReactComponent;
    }
    

    确保该文件被TS编译器识别(可在tsconfig.json的include字段中添加"src/**/*.d.ts")。

内容的提问来源于stack exchange,提问作者iufb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:15:29