使用打字稿测试 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的主要内容,如果未能解决你的问题,请参考以下文章