当前位置: 首页 > 知识库问答 >
问题:

无法使用TypeScript导入本地字体

凤明朗
2023-03-14

我正在尝试使用TypeScript项目导入 React 上的字体文件,但它无法将其识别为字体文件,而是将其视为模块

文件夹结构:

在我的index.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-loader(我也尝试使用file-loader)。这是我的webpack.config.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]',
            },
          },
        },

这是我得到的错误: 找不到模块 “./海尔维蒂卡NeueW02-45Ligh.woff'

此问题的原因可能是什么?

共有2个答案

侯令雪
2023-03-14

对于将面临类似问题的expo用户,完成之前的答案:我遇到了同样的问题,并且声明模块足以导入字体,但不会实际加载这些字体。我使用的是曝光字体,而Typescript抱怨结果的类型。为了使它工作,我创建了包含以下内容的相同文件:

declare module "*.ttf" {
  const value: import("expo-font").FontSource;
  export default value;
}

这表明导入的模块将具有FontSource类型,该类型来自expo fontlibrary。然后我可以加载我的字体:)

邰钟展
2023-03-14

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

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

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

它告诉类型脚本,字体文件类型是有效的导入模块。

“d.ts”文件格式用于提供关于用JavaScript编写的API的类型信息,或者第三方导入的形状。

请确保在 tsconfig.json包含部分中考虑了类型文件。一个不错的方法是在项目中有一个根键入目录,然后在包含上附加键入/**/*.d.ts

 类似资料:
  • 我有一本书。节点js(07.10.19版本的node.js的最新版本)应用程序中的ts文件,带有导入节点模块而无默认导出。我使用这种结构:

  • 提前感谢您的帮助。 这个问题似乎已经在其他地方被提出和回答,但我相信我已经尝试了所有这些解决方案,但没有取得真正的进展。 我试图为webdriverIO创建一个自定义记者。然而,当所有导入都运行时,我得到以下错误: 无法在模块外使用导入语句 如果我试图执行文件顶部的导入语句,则会在导入WebdriverTestrasER行上出现上述错误。我可以通过使用要求来解决这个问题,但是在从@wdio/记者导

  • Mac OS High Serial 10.13.6 版本:2018-09 (4.9.0) 嗨,我在用Eclipse创建JUnit测试用例时遇到了麻烦。我已经谷歌了这个错误,但是所有的帖子都告诉我你必须添加。如下所示,我有。 错误是, 有人知道我有什么问题吗?

  • 我正在使用processing 3。我正在尝试将gicentre geomap库添加到我的处理库中。我从下载了geomap库https://www.gicentre.net/geomap/.并将其提取并移动到“处理/库”下。在此之后,我尝试运行此库中的一个示例。它告诉我 导入组织。无法解决gicentre。并且GeoMap类不存在。 有主意吗?谢谢。

  • 我试图从djangotoolbox.fields使用Listfield,但它给我一个错误说: 我做错了什么?

  • 问题内容: 我正在尝试使其工作,但似乎无法在SO的任何地方找到解决方案。尝试编译此单文件应用程序时: 使用命令“ tsc app.ts –module’commonjs’”,我得到以下错误(不使用– module标志给我一个额外的错误,告诉我我需要它来编译外部模块): 问题答案: TypeScript需要知道它存在。 为节点安装类型definitinos: 旧答案 遵循这两个步骤 从此处下载文件: