当前位置: 首页 > 面试题库 >

在TypeScript中导入json文件

汪迪
2023-03-14
问题内容

我有一个如下JSON文件:

{

  "primaryBright":    "#2DC6FB",
  "primaryMain":      "#05B4F0",
  "primaryDarker":    "#04A1D7",
  "primaryDarkest":   "#048FBE",

  "secondaryBright":  "#4CD2C0",
  "secondaryMain":    "#00BFA5",
  "secondaryDarker":  "#009884",
  "secondaryDarkest": "#007F6E",

  "tertiaryMain":     "#FA555A",
  "tertiaryDarker":   "#F93C42",
  "tertiaryDarkest":  "#F9232A",

  "darkGrey":         "#333333",
  "lightGrey":        "#777777"
}

我正在尝试将其导入.tsx文件。为此,我将其添加到类型定义中:

declare module "*.json" {
  const value: any;
  export default value;
}

我正在这样导入。

import colors = require('../colors.json')

在文件中,我将颜色primaryMain用作colors.primaryMain。但是我得到一个错误:

属性’primaryMain’在类型’typeof“ * .json”上不存在


问题答案:

导入表单和模块声明需要就模块的形状,导出的内容达成一致。

编写时(自TypeScript 2.9导入JSON时,针对兼容模块格式的一种次佳实践, 请参见note

declare module "*.json" {
  const value: any;
  export default value;
}

您要说明所有以指定符结尾的模块都有一个 名为.json的单个导出。 __default

有几种方法可以正确使用此类模块,包括

import a from "a.json";
a.primaryMain

import * as a from "a.json";
a.default.primaryMain

import {default as a} from "a.json";
a.primaryMain

import a = require("a.json");
a.default.primaryMain

第一种形式是最好的,而它利用的语法糖正是JavaScript能够default导出的原因。

但是,我提到了其他形式,可以给您一些提示。特别注意最后一个。require给您一个表示模块本身的对象,而 不是 其导出的绑定。

那么为什么会出错呢?因为你写了

import a = require("a.json");
a.primaryMain

但是primaryMain,您的尚未声明出口的名称"*.json"

所有这些都假定您的模块加载器default按照原始声明的建议将JSON作为导出提供。

注意: 从TypeScript
2.9开始,您可以使用--resolveJsonModule编译器标志来让TypeScript分析导入的.json文件,并提供有关其形状的正确信息,从而避免了通配符模块声明的需要并验证了文件的存在。某些目标模块格式不支持此功能



 类似资料:
  • 问题内容: 我正在使用Angular Maps构建地图应用程序,并希望导入JSON文件作为定义位置的标记列表。我希望将此JSON文件用作app.component.ts中的marker []数组。而不是在TypeScript文件中定义标记的硬编码数组。 导入此JSON文件以在我的项目中使用的最佳过程是什么?任何方向都非常感谢! 问题答案: 直到最近的打字稿更新之前,Aonepathan的单行代码都

  • 问题内容: 我是React的新手,正在尝试从外部文件导入JSON 变量。我收到以下错误: 找不到模块“ ./customData.json” 有人可以帮我吗?如果我的变量位于外部JSON文件中,但没有该变量,则它可以工作。 index.js hobbies.js profile.js customData.json 问题答案: 一种不错的方法(不添加伪造的.js扩展名,用于代码而不用于数据和配置)

  • 我有3个不同的TS文件,在1个主TS文件中动态加载2个TS文件,如下所示 现在,在这两个TS文件中,我正在导入jquery和jquery父TS文件 我的tsconfig.json 所以我的问题是jquery文件加载3次还是只加载一次。

  • 问题内容: 我正在尝试在React组件中加载language.json文件。当我想导入json文件时,第一步出现以下错误。这是错误: 我正在使用webpack,这是配置文件: 并且我已经安装了以下软件包: 这就是我尝试导入文件(ES6格式)的方式: 另外,我检查了json文件格式并进行了验证!那么,您认为问题出在哪里? 问题答案: azium是正确的,需要加载程序,但这是很好的配置: npm命令

  • 问题内容: 所以代码很简单: Calls.json file.ts 生成的javascript是正确的,并且在运行节点js服务器时,控制台日志json.SERVER会按需打印’{请求:{一个:‘1’}}’。 但是,打字稿编译器(commonjs)并不特别喜欢这种情况,并抛出:“找不到模块’../static/calls.json’”。 当然,我尝试编写.d.ts文件,如下所示: 这显然会引发:“环

  • 问题内容: 如何在Ecmascript 6中访问json文件?以下无效: 如果我尝试导入JavaScript文件,则效果很好。 问题答案: 一个简单的解决方法: config.js 然后… 不允许导入现有的.json文件,但可以完成工作。