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

NextJS中SVGR+Webpack+TypeScript配置后类型提示失效求助

解决Next.js + SVGR 类型提示失效问题

以下是几个可行的排查和解决步骤:

1. 完善类型声明,区分两种导入场景

你当前的类型声明只覆盖了作为React组件导入的SVG,但Webpack配置同时支持*.svg(组件)和*.svg?url(文件URL)两种导入方式,TS可能因场景混淆导致类型识别异常。更新declarations.d.ts内容:

// 作为React组件导入的SVG(不带?url后缀)
declare module '*.svg' {
  import React from 'react';
  const SVG: React.FC<React.SVGProps<SVGSVGElement>>;
  export default SVG;
}

// 作为文件URL导入的SVG(带?url后缀)
declare module '*.svg?url' {
  const content: string;
  export default content;
}

2. 确认tsconfig.json的include配置正确

确保declarations.d.ts被正确包含在TS编译范围内,示例配置:

{
  "include": [
    "declarations.d.ts",
    "next-env.d.ts",
    "**/*.ts",
    "**/*.tsx"
  ]
}

注意检查路径准确性:如果声明文件放在src目录下,需写成src/declarations.d.ts或用src/**/*.d.ts;同时确认exclude数组未意外排除该文件。

3. 重启TypeScript语言服务

VSCode的TS服务可能缓存旧类型信息,按Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(Mac),输入并执行TypeScript: Restart TS Server,之后重新检查类型提示。

4. 调整SVGR配置选项(可选)

尝试简化@svgr/webpack配置,暂时移除ext: 'tsx'选项——Next.js处理SVGR时通常无需手动指定输出扩展名:

use: [
  {
    loader: '@svgr/webpack',
    options: {
      typescript: true,
      // 移除ext: 'tsx'
    },
  },
]

5. 验证路径别名和文件存在性

确认导入的SVG文件路径拼写正确,且路径别名@在tsconfig.json中配置无误:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    }
  }
}

同时检查目标SVG文件确实存在于指定路径下。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:03:32