likes
comments
collection
share

解决ts开发时引入图片报错:“找不到xxx或其相应的类型声明” 的问题

作者站长头像
站长
· 阅读数 42

在使用ts开发时,引入图片报错

import img from '../../assets/images/foo.png';
找不到模块“../../assets/images/foo.png”或其相应的类型声明。

因为typescript无法识别非代码资源。我们需要主动的去声明这个module

方法一:来源:参考链接新建一个ts声明文件:images.d.ts

declare module '*.svg'
declare module '*.png'
declare module '*.jpg'
declare module '*.jpeg'
declare module '*.gif'
declare module '*.bmp'
declare module '*.tiff'

项目编译过程中会自动去读取.d.ts这种类型的文件,所以不需要我们手动加载。放置在tsconfig.json中include属性所配置的文件夹下即可。

方法二:如果你的项目在创建时使用:

npx create-react-app my-app --template typescript
# or
yarn create react-app my-app --template typescript

那你的src目录下会有一个 react-app-env.d.ts 文件。内容如下:

/// <reference types="react-scripts" />

该文件使用三斜线指令引入了react-scripts 的类型声明文件,在目标文件 react-app.d.ts 中声明了各类图片等资源的类型。文件内容:

/// <reference types="node" />
/// <reference types="react" />
/// <reference types="react-dom" />

declare namespace NodeJS {
  interface ProcessEnv {
    readonly NODE_ENV: 'development' | 'production' | 'test';
    readonly PUBLIC_URL: string;
  }
}

declare module '*.avif' {
  const src: string;
  export default src;
}

declare module '*.bmp' {
  const src: string;
  export default src;
}

declare module '*.gif' {
  const src: string;
  export default src;
}

declare module '*.jpg' {
  const src: string;
  export default src;
}

declare module '*.jpeg' {
  const src: string;
  export default src;
}

declare module '*.png' {
  const src: string;
  export default src;
}

declare module '*.webp' {
    const src: string;
    export default src;
}

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

  export const ReactComponent: React.FunctionComponent<React.SVGProps<
    SVGSVGElement
  > & { title?: string }>;

  const src: string;
  export default src;
}

declare module '*.module.css' {
  const classes: { readonly [key: string]: string };
  export default classes;
}

declare module '*.module.scss' {
  const classes: { readonly [key: string]: string };
  export default classes;
}

declare module '*.module.sass' {
  const classes: { readonly [key: string]: string };
  export default classes;
}

只要tsconfig.json中include包含了src目录,就可以正常引入。