【发布时间】:2021-12-11 15:46:23
【问题描述】:
我知道 zod 的目的是解析不受信任的输入数据并断言它的类型与您的架构匹配。
但通常这些数据是通过网络 API 进入的,保证至少其顶级形状,如 string 或 object。
zod 似乎有必要对 parse() 进行这种顶级类型检查,如果只是为了防止诸如拼写错误之类的愚蠢错误。但是,貌似没有。
作为一个简化的例子来说明
const schema = z.string().email();
schema.parse(1); // no type error here - why?
似乎parse(1) 应该有一个编译时类型错误,因为我们知道文字number 1 不可能在运行时正确验证。我们不能用一些随机的string 输入来做到这一点 - 需要运行时解析以确保它是有效的电子邮件 - 但这里的 number 似乎是明显的程序员错误,甚至不应该编译。 p>
一个更实际的例子,导致我提出这个问题
async function validateRequest(request: Request) {
const someSchema = z.object({ ... })
return someSchema.parse(request.json()) // didn't await request.json() so won't work
}
一个愚蠢的错误,比如省略上面的await,似乎应该很容易通过someSchema.parse()检查我传递给它的是object,而不是Promise<object>。
那么,有没有办法使用 zod 启用这种顶级类型检查?
或者这种行为是出于某种我对 zod 的设计不了解的原因而故意的?
【问题讨论】:
标签: typescript zod