在TypeScript中导入json文件

我有一个如下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时,针对兼容模块格式的一种次佳实践, )

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文件,并提供有关其形状的正确信息,从而避免了通配符模块声明的需要并验证了文件的存在。某些目标模块格式不支持此功能。

以上是 在TypeScript中导入json文件 的全部内容, 来源链接: utcz.com/qa/429952.html

回到顶部