如何在 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章