我试图将SVG作为带有VTE和vite-plugin-svgr插件的ReactComponent导入,但我遇到了一个错误,我认为该错误与类型有关.

下面是我的IMPORT语句和用法:

import { ReactComponent as ProfileIcon } from '../assets/profile.svg'

export function Example() {
    return (
        <div>
            <p>blahblahblah</p>
            <ProfileIcon />
        <div>
    }
}

该页面根本不会加载,并且我的浏览器控制台显示以下错误:

未捕获语法错误:不明确的间接导出:ReactComponent

我认为这与我的custom.d.ts文件有关,其中包含以下声明:

declare module '*.svg' {
    import * as React from 'react'

    export const ReactComponent: React.FunctionComponent<
        React.ComponentProps<'svg'> & { title?: string }
    >
    export default ReactComponent
}

我在排除了另一个打字错误后添加了这个声明,许多StackOverflow用户发布了同样的建议,但只有here's one example个.

我似乎找不到适合我的Reaction+Vite+TypeScrip SVG组件指南.

以下是我做的其他一些更改,以供参考:

tsconfig.json

{
    "compilerOptions": {
        ...
        "types": ["vite-plugin-svgr/client"]
    },
    ...
    "include": ["src", "custom.d.ts"]
}

vite-env.d.ts

/// <reference types="vite-plugin-svgr/client" />
/// <reference types="vite/client" />

推荐答案

我在过go 多次遇到过相同的错误.虽然我不确定根本原因,但使用"@svgr/roll up"库对我很有效:

1安装@svgr/ROLLUP库:

$ npm install @svgr/rollup

2配置VITE使用@svgr/roll up处理SVG文件,将其添加到vite.config.ts文件中:

import svgr from "@svgr/rollup";
import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react(), svgr()],
});

3定义SVG文件的TypeScrip类型,将其添加到"Custom.d.ts"文件中:

declare module "*.svg" {
  import React = require("react");
  export const ReactComponent: React.FC<React.SVGProps<SVGSVGElement>>;
  const src: string;
  export default src;
}

Typescript相关问答推荐

类型脚本不会推断键的值类型

从接口创建类型安全的嵌套 struct

如何在排版中正确键入中间件链和控制器链

在键和值为ARGS的泛型函数中未正确推断类型

使Typescribe强制所有对象具有相同的 struct ,从两个选项

打印脚本丢失函数的泛型上下文

根据另一个属性的值来推断属性的类型

React Typescript项目问题有Redux-Toolkit userSlice角色问题

在Reaction-Native-ReAnimated中不存在Animated.Value

使用2个派生类作为WeakMap的键

如何将定义模型(在Vue 3.4中)用于输入以外的其他用途

TypeScrip:强制使用动态密钥

根据类型脚本中的泛型属性 Select 类型

如何获取受类型脚本泛型约束的有效输入参数

在正常函数内部调用异步函数

如何使用泛型函数参数定义类型脚本函数

有没有一种更好的方法来存储内存中的数据,而不是在类型脚本中使用数组和基于索引的函数?

任何导航器都未处理有效负载为";params";:{";roomId";:";...";}}的导航操作

如何为对象数组中的每个条目推断不同的泛型

具有枚举泛型类型的 Typescript 对象数组