首页 > 解决方案 > TypeScript 的运行时数据验证

问题描述

TypeScript 没有运行时检查来确保加载的数据与类型匹配。我们目前使用通过 CLI 从我们的类型生成的 JSON 模式,typescript-json-schema然后在运行时使用ajv. 我们认为这是一个很好的解决方案,直到我们发现它不能很好地与 JS 日期配合使用,因为日期不是 JSON 的一部分。

有人对此有解决方案吗?我们使用类型而不是类。

标签: typescriptvalidation

解决方案


您可以使用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 模式(检查问题)。


推荐阅读