使用TypeScript验证JSON

5

我们使用JSON文件来配置一些Web应用程序,显然会在字段名称等方面出现错误。

是否可以使用TypeScript定义来验证JSON文件?或者我们应该将配置迁移到其他格式?

我们同时使用Intellij和VSCode进行开发。

示例定义:

interface AppConfig {
  field1: number;
  field2?: string;
  field3: number[];
}

示例配置:

{
  "field": 1,
  "field3": 2
}

示例验证结果:

TS2322: Type '{ field: number; field3: number[]; }' is not assignable to type 'AppConfig'.
TS2322: Type 'number' is not assignable to type 'number[]'.

你想在什么时候执行检查?在编译时吗?你在哪里使用JSON?你是通过HTTP加载它还是在JavaScript文件中导入它? - MaartenDev
你有什么JSON文件的代码示例吗?必须包含哪些字段,哪些是可选的? - Sebastian Salletmayer
@MaartenDev 最好是在每次编辑时自动进行(类似于lint检查)或按需进行。但我想了解可能性,所以一开始不想限制它。 - Jan Málek
@SebastianSalletmayer 我编辑了我的问题,希望这回答了你的问题。 - Jan Málek
1个回答

1
一种解决方案是根据你的 TypeScript 接口创建 JSON Schema 文件,然后让 IDE 根据模式对 JSON 文件进行验证。IntelliJ 提供了这样的验证(包括自动完成)与他们的 JSON 支持。
如果你不想自己创建模式,可以使用 typescript-json-schema NPM 包从你的 TypeScript 接口生成它们。

我已经花了大约3个小时来尝试这个,它几乎可以,但还不够:当我使用typescript-json-schema appconfig.ts * -o appconfig.schema.json --required --noExtraProps运行它时,我的ts文件中的结果包含了不必要的嵌套"definitions": { "AppConfig": {,这使得它无法使用。你有任何想法如何摆脱它吗? 如果没有这个嵌套,它的所有功能都完美地工作。 - Jan Málek
1
@JanMálek 这是由于您命令中的 * 导致的。如果您显式指定类型,它应该会产生所需的结果:typescript-json-schema appconfig.ts AppConfig -o appconfig.schema.json --required --noExtraProps - fknx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接