使用打字稿测试 JSON

Posted

技术标签:

【中文标题】使用打字稿测试 JSON【英文标题】:Testing JSON with typescript 【发布时间】:2022-01-23 01:55:25 【问题描述】:

我需要使用 typescript 验证 JSON。我想这样做:

jsonFile.json


  "foo": "bar",
  "fiz": "baz",
  "potato": 4

JSONType.ts

type JSONType = typeof jsonFile;

jsonFile2.json


  "foo": 5,
  "fiz": false
;

如果我这样做:

const jsonFile2: JSONType = JSONFile2

我希望它因类型不匹配和缺少属性而引发错误。

我本质上是想确保两个 JSON 具有相同的结构,其中一个作为事实来源。我该怎么做?

【问题讨论】:

看看JSON Schema 这很有趣,但不幸的是不是我想要的 如果是 JSON 就不行。类型仅在编译时存在,根据定义,JSON 在运行时从字符串解析为数据结构。如果您可以将其从 JSON 转换为实际的 Typescript 代码,那么您可以这样做,例如,下面的答案有一种方法可以告诉编译器将其视为 TS 代码,但是您想要获取 typeof 的任何内容(在 Typescript 意义上)必须在编译时就可以知道。 【参考方案1】:

第一步是通过在 tsconfig.json 中添加 "resolveJsonModule": true 来允许 json 模块

下一步是导入json文件,如下所示,

import file1 from './json/jsonFile.json'
import file2 from './json/jsonFile2.json'

然后,声明您的类型并照常应用它。

type JSONType = typeof file1;
const jsonFile2:JSONType = file2

它应该抛出这个错误:

Property '"potato"' is missing in type ' foo: number; fiz: boolean; ' but required in type ' foo: string; fiz: string; potato: number; '.ts(2741)
jsonFile.json(4, 5): '"potato"' is declared here.

【讨论】:

你能把它放在一个codepen或这样的smth中吗?我相信我有这个确切的设置,它不会抛出任何东西 没关系!它有效 不客气!

以上是关于使用打字稿测试 JSON的主要内容,如果未能解决你的问题,请参考以下文章

打字稿:将 JSON 对象转换为类/接口对象

打字稿中无法识别json文件

如何使用打字稿为反应测试库设置智能感知

用玩笑测试打字稿中的私有函数

反应本机打字稿屏幕测试返回测试套件无法运行 AsyncStorage 为空

在没有导出的情况下测试打字稿模块