如何在 TypeScript 中引用 JSON 文件?

Posted

技术标签:

【中文标题】如何在 TypeScript 中引用 JSON 文件?【英文标题】:How to reference a JSON file in TypeScript? 【发布时间】:2019-01-12 10:36:35 【问题描述】:

我目前正在尝试引用 JSON 路径并将其存储在常量中。我尝试使用字符串进行引用,然后我 res.send 将其作为响应发送,它还给了我我的字符串。那么,为了查询它的字段,继续引用 JSON 文件的最合适的方法是什么?

感谢您的帮助!

【问题讨论】:

只需用 nodejs 导入文件就会自动将其转换为对象。见nodejs docs,具体见LOAD_AS_FILE(X)的第3步。 我尝试了 LOAD_AS_FILE(X) 但它实际上并没有让我存储在常量中吗?... Typescript compiler error when importing json file的可能重复 似乎有些混乱。 LOAD_AS_FILE(X) 不是一个实际的方法,而是描述模块加载算法如何在 NodeJS 中工作的技术文章。重点是说明 JSON 可以直接加载到 NodeJS 中,而无需手动读取文件并解析 JSON 以访问它所表示的数据。 【参考方案1】:

由于您已经将 JSON 文件的内容加载到字符串中,因此您必须记住在对 application/json 的响应中设置 Content-Type 标头。这是向客户端指示响应正文的类型的内容。假设您使用的是 express,您只需在调用 res.send 之前添加 res.setHeader('Content-Type', 'application/json');

【讨论】:

实际上似乎根本没有加载内容。它似乎只是一个包含我的路径的字符串。我只是打印它的内容,甚至是 res.json 它只是返回我'./keyfile.json'。不是 JSON 文件的实际内容。我在这里的语法方面有点迷失。仅仅引用一个文件并查询它的内容似乎是一个地狱...... 我明白了......对不起,我误读了你关于“它的查询字段”部分的问题......我相信 Jason Cust 的回答应该可以解决你的问题,希望我的会有一些用处一旦你加载了 JSON :)【参考方案2】:

在 nodejs 中,如果只是简单地导入一个 JSON 文件,那么它将自动被解析为一个对象:

const keyFile = require('./keyfile.json');

更新: 如果您使用的是TS >=2.9:

支持良好类型的 JSON 导入 使用 moduleResolution 的节点策略时,TypeScript 现在能够将 JSON 文件作为输入文件导入。这意味着您可以在他们的项目中使用 json 文件,而且它们的类型会很好!

// ./tsconfig.json

    "compilerOptions": 
        "module": "commonjs",
        "resolveJsonModule": true,
        "esModuleInterop": true
        "outDir": "lib"
    ,
    "include": ["src"]


// ./src/settings.json

    "dry": false,
    "debug": false


// ./src/foo.ts
import settings from "./settings.json";
settings.debug === true;  // Okay
settings.dry === 2;       // Error! Can't compare a `boolean` and `number`

这些 JSON 文件也将转移到您的输出目录,以便在运行时“正常工作”。

【讨论】:

JSON 文件在 TS 中未被识别为模块,因为它在我尝试导入时指示我出错。我不能简单地引用 TypeScript 中的文件并将其存储在变量中吗???! @JulienHora 我直接检查了文档,并直接从那里引用了答案。希望对您有所帮助。 只是为了澄清像我一样困惑的其他人:即使使用新的 Typescript 行为,它仍然只将 json 文件作为字符串导入,而如果你使用“require”它也会转换字符串到一个 JS 对象

以上是关于如何在 TypeScript 中引用 JSON 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何添加自定义 TypeScript 全局接口

带有引用的 TypeScript 项目

使用TypeScript中的TypeScript库

如何在 TypeScript 3.0 中使用项目引用?

如何在 TypeScript 中使用导入的 JSON 文件的类型

如何在 Angular 2 的 TypeScript 中映射嵌套的 Json