使用m&amp;React应用程序;Typescript.我想在<img/>个标签中使用一个图像.但是,我没有找到访问图像文件的正确方法.

webpack.config.js:

 ...
 module: {
        rules: [
            ...
            {
                test: /\.(png|jpe?g|svg)$/,
                loader: 'file-loader',
                options: {
                    name: 'assets/[name].[ext]',
                }
            }
        ]

app.tsx:

...
render() {
    return <img src='/assets/logo-large.png' alt="logo"/>
}

运行应用程序时,找不到assets/logo-large.png资源.

推荐答案

安装网页包文件加载程序,添加声明.d、 ts,瞧!

在花了一些时间来找出解决方案后,这就是我所做的...

第一步

确保您已通过安装file-loader作为开发人员依赖项

npm install -D file-loader,如果你用Yarn yarn add -D file-loader

第二步

在Webpack rules webpack.config.js中添加与文件扩展名对应的加载程序,如下所示

module: {
    rules: [
      ...,
      {
        test: /\.(png|jpe?g|gif|jp2|webp)$/,
        loader: 'file-loader',
        options: {
          name: '[name].[ext]',
        },
      },
    ],
  },

第三步

tsconfig.json文件旁边创建一个index.d.ts文件,实际上你可以随意命名,但你必须遵循步骤4.

由于Webpack现在将处理多个图像扩展,因此您可以添加file-loader支持的其他图像格式

declare module '*.png';
declare module '*.jpg';

第四步

转到tsconfig.json文件,将index.d.ts添加到include数组,如下所示:

{
  "compilerOptions": {
    ...,
    "jsx": "react",
    "esModuleInterop": true,
    "target": "ES2020",
    "moduleResolution": "node"
  },
  "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"],
  "include": ["src", "index.d.ts"] /// <-- Like this!!
}

请注意,如果您没有定义include数组,那么typescript默认情况下将添加根文件夹中的所有文件,如果您只定义一个文件,而不是包含所有代码的文件,那么它不会编译.我认为将所有代码都放在src文件夹中是一种很好的做法.

瞧!!

Typescript相关问答推荐

如果存在一处房产,请确保存在其他房产

类型保护,用于验证是否定义了二元组的每个项

类型是工作.但它失go 了正确变体的亮点..为什么?或者如何增强?

在类型内部使用泛型类型时,不能使用其他字符串索引

接口的额外属性作为同一接口的方法的参数类型'

如何通过TypeScript中的工厂函数将区分的联合映射到具体的类型(如类)?

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

TypeScrip表示该类型不可赋值

如何避免推断空数组

编译TypeScrip项目的一部分导致错误

如何从对象或类动态生成类型

为什么发送空字段?

为什么特定的字符串不符合包括该字符串的枚举?

将布尔值附加到每个对象特性

react 路由不响应参数

如何在打字角react 式中补齐表格组

有没有更干净的方法来更新**key of T**的值?

如何在TypeScript类成员函数中使用筛选后的keyof this?

可以';t使用t正确地索引对象;联合;索引类型

断言同级为true或抛出错误的Typescript函数