我正在try 在React with TypeScript项目上导入字体文件,但它没有将其识别为字体文件,而是将其视为一个模块

文件夹 struct :

enter image description here

在我的索引中.tsx文件,我导入了我需要的字体,并导出了字体常量:

import helveticaNeueLightWoff from './HelveticaNeueW02-45Ligh.woff';
import helveticaNeueLightWoff2 from './HelveticaNeueW02-45Ligh.woff2';
import helveticaNeueMediumWoff from './HelveticaNeueW02-67MdCn.woff';
import helveticaNeueMediumWoff2 from './HelveticaNeueW02-67MdCn.woff2';
import helveticaNeueBoldWoff from './HelveticaNeueW02-75Bold.woff';
import helveticaNeueBoldWoff2 from './HelveticaNeueW02-75Bold.woff2';
import helveticaNeueBoldCnWoff from './HelveticaNeueW02-77BdCn.woff';
import helveticaNeueBoldCnWoff2 from './HelveticaNeueW02-77BdCn.woff2';

const Fonts = {
  helveticaNeueLightWoff,
  helveticaNeueLightWoff2,
  helveticaNeueMediumWoff,
  helveticaNeueMediumWoff2,
  helveticaNeueBoldWoff,
  helveticaNeueBoldWoff2,
  helveticaNeueBoldCnWoff,
  helveticaNeueBoldCnWoff2,
};

export default Fonts;

我使用url加载器(我也try 使用文件加载器).这是我的网页包.配置.ts

{
          test: /\.(woff|woff2)(\?v=\d+\.\d+\.\d+)?$/,
          use: {
            loader: 'url-loader',
            options: {
              // Limit at 50k. Above that it emits separate files
              limit: 50000,
              // url-loader sets mimetype if it's passed.
              // Without this it derives it from the file extension
              mimetype: 'application/font-woff',
              // Output below fonts directory
              name: './fonts/[name].[ext]',
            },
          },
        },

这是我得到的错误:Cannot find module './HelveticaNeueW02-45Ligh.woff'

这个问题的原因可能是什么?

推荐答案

您需要将字体文件格式声明为模块,以便TypeScript能够正确解析它们.

创建一个fonts.d.ts文件并添加以下内容

declare module '*.woff';
declare module '*.woff2';

它告诉TypeScript字体文件类型是有效的导入模块.

"d.ts"文件格式用于提供有关用JavaScript编写的API或第三方导入的形状的typescript类型信息.

确保tsconfig.json中的include部分考虑了类型文件.一个很好的方法是在项目中有一个根目录typings,然后在include上附加typings/**/*.d.ts.

Typescript相关问答推荐

根据第一个参数的值设置第二个参数的类型

如何在类型脚本中声明对象其键名称不同但类型相同?

如何根据数据类型动态注入组件?

了解TS类型参数列表中的分配

泛型函数类型验证

如何创建泛型类型组件来使用React Native的FlatList或SectionList?'

React router 6.22.3不只是在生产模式下显示,为什么?

将对象属性转换为InstanceType或原样的强类型方法

TypeScrip 5.3和5.4-对`Readonly<;[...number[],字符串]>;`的测试版处理:有什么变化?

是否可以针对联合类型验证类型属性名称?

TypeError:正文不可用-NextJS服务器操作POST

为什么在leetcode问题的测试用例中,即使我确实得到了比预期更好的解决方案,这段代码也失败了?

我在Angular 17中的environment.ts文件中得到了一个属性端点错误

基于泛型的条件接口键

如何在Next.js和Tailwind.css中更改悬停时的字体 colored颜色

在类型脚本中创建显式不安全的私有类成员访问函数

可以将JS文件放在tsconfig';s includes/files属性?或者,我如何让tsc判断TS项目中的JS文件?

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

我应该使用服务方法(依赖于可观察的)在组件中进行计算吗?

为什么 typescript 在对象合并期间无法判断无效键?