typescript - TypeScript 的运行时数据验证
问题描述
TypeScript 没有运行时检查来确保加载的数据与类型匹配。我们目前使用通过 CLI 从我们的类型生成的 JSON 模式,typescript-json-schema
然后在运行时使用ajv
. 我们认为这是一个很好的解决方案,直到我们发现它不能很好地与 JS 日期配合使用,因为日期不是 JSON 的一部分。
有人对此有解决方案吗?我们使用类型而不是类。
解决方案
您可以使用zod库。您只需要一个模式,就可以使用它生成类型并使用 JSON 模式验证数据。
Zod 是一个 TypeScript 优先的模式声明和验证库。我使用术语“模式”来泛指任何数据类型/结构,从简单的字符串到复杂的嵌套对象。
看看这个例子:
import * as z from 'zod'
const schema = z.object({
stringValue: z.string(),
numberValue: z.number(),
dateValue: z.date()
})
type MyType = z.infer<typeof schema>
// type MyType = {
// stringValue: string;
// numberValue: number;
// dateValue: Date;
// }
const data = schema.parse({
stringValue: 'Hello',
numberValue: 1,
dateValue: new Date()
})
这个库最大的问题是当您需要转换数据时它不能很好地工作(例如,您将日期作为字符串获取)。它有一个关于数据转换的开放问题。此外,您不能从 zod 实例生成 JSON 模式(检查问题)。
推荐阅读
- javascript - 使用 Enzymes 进行 React 组件渲染功能测试
- google-apps-script - 错误:在 ID 为 45 的对象上调用方法 getPageElementRange 时无法找到目标对象
- python - 从 .pb 文件加载 TensorFlow 模型
- mongodb - 在mongodb中根据字符串中的时间排序
- ag-grid - ag-grid - 列标题和第一行之间的空间
- xamarin - 在xamarin表单中向上/向下滑动时如何在页面中一一显示列表的每条记录
- css - 单击按钮时CSS过渡不平滑
- angular - 通过 Angular 9/10 进行 Apple ID 身份验证
- java - AWS:在 AWSSecurityTokenService 上调用 getSessionToken() 会导致 HTTP 403
- spring-cloud - Spring Cloud LoadBalancerClient - Hoxton SR8 - 抛出错误