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

TypeScript带声明资产文件的路径解析与校验方案问询

在TypeScript中解析资产文件并保留路径校验的方案

问题现状

  • 使用相对路径导入Spinner.svg时,会显示多个定义,优先跳转至声明文件而非实际资产文件,且无路径拼写或层级校验
  • 使用tsconfig.json中paths配置的路径别名导入时,无法解析实际文件,仅能关联到.svg声明文件
  • 无效导入不会报错,仅在运行时暴露问题

React项目中SVG资产示例

文件目录结构

  • src
  • src/assets.d.ts
  • src/assets
  • src/assets/Spinner.svg
  • src/component/Component.tsx

要让TypeScript直接导入svg|png|jpg或其他未支持的资产文件,需编写自定义声明文件。

React + react-native-svg示例:

declare module '*.svg' {
  const content: React.FC<React.SVGAttributes<SVGElement>>
  export default content
}

配置了assets路径别名的tsconfig.json文件:

{
  "compilerOptions": {
    "esModuleInterop": true,
    "isolatedModules": true,
    "jsx": "react",
    "lib": ["ES2023"],
    "moduleResolution": "node",
    "noEmit": true,
    "strict": true,
    "strictNullChecks": true,
    "resolveJsonModule": true,
    "target": "esnext",
    "baseUrl": "./",
    "paths": {
      "assets/*": ["src/assets/*"]
    }
  },
  "include": ["src/**/*"],
  "exclude": [
    "node_modules",
    "babel.config.js",
    "metro.config.js",
    "jest.config.js"
  ]
}

Component.tsx中的TypeScript导入示例:

// 打开定义窗口时会显示相对路径导入和声明文件
import '../assets/Spinner.svg'

// 仅关联到assets.d.ts文件
import 'assets/Spinner.svg'

// 无报错的无效导入(仅运行时出错)
import '../assets/Spinner1.svg'
import '../assets/123/Spinner.svg'

期望解决方案

  • 路径校验生效,且IDE可跳转至实际资产文件
  • VSCode及其他IDE可校验路径有效性
  • 可在CI环境中校验路径是否存在

解决方案不局限于tsconfig.json或声明文件,但优先考虑此类方案。

备选方案

1. 使用作用域路径,仅从该作用域解析.svg文件

  • 可避免路径层级导入问题
  • 仍可能因文件名拼写错误导致失败

示例声明:

declare module 'assets/*.svg' {
  const content: React.FC<React.SVGAttributes<SVGElement>>
  export default content
}

2. 创建/添加IDE路径解析插件

  • 例如eslint-plugin-validate-declared-imports

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:34:58