如何创建带有动态字符串键的Zod验证对象?
在Zod中实现类似TypeScript Record<string, string>的对象验证
你需要的是验证对象的所有键为字符串、对应值也为字符串的通用结构,这和TypeScript里Record<string, string>的作用一致,但z.object()仅适用于定义固定键名的对象,所以你之前的写法无法生效。
在Zod中,专门提供了z.record()方法来处理这类键值对结构,正确写法如下:
// 验证键为字符串、值为字符串的对象 const dataSchema = z.record(z.string()); // 或者更明确地指定键和值的schema(效果和上面一致) const dataSchema = z.record(z.string(), z.string());
验证示例
- 合法输入:
{ username: "john_doe", email: "john@example.com" }会通过验证 - 非法输入:
{ [Symbol("id")]: "123" }(键为Symbol类型,不符合字符串键要求)会验证失败
注意:JavaScript中对象的非Symbol键会自动转换为字符串,所以像{ 123: "test" }这样的输入,实际键是字符串"123",会被z.record(z.string())判定为合法。
内容的提问来源于stack exchange,提问作者Amjad sibili
相关产品推荐
相关产品推荐

