我有一个应该只允许特定数字的属性:
{
...
x: 1 | -1
}
如何在输入验证模式中定义这一点?
如果输入是 JSON,则很简单:
x: z.union([z.literal(-1), z.literal(1)])
但是如果输入来自搜索查询,那么值就是字符串,所以我需要能够强制转换为数字,但仍然限制为 -1 和 1,以使从模式推断的类型与 TypeScript 类型兼容。
我有一个应该只允许特定数字的属性:
{
...
x: 1 | -1
}
如何在输入验证模式中定义这一点?
如果输入是 JSON,则很简单:
x: z.union([z.literal(-1), z.literal(1)])
但是如果输入来自搜索查询,那么值就是字符串,所以我需要能够强制转换为数字,但仍然限制为 -1 和 1,以使从模式推断的类型与 TypeScript 类型兼容。
其中一种方法是接受数字和字符串, 将字符串转换为数字,然后优化结果以仅解析允许的数字:
或者将转换传输到您的原始模式:
或者您可以使用预处理然后跟管道:
该文档还指出,强制可以以相同的方式工作,并且更接近您的原始问题,尽管对转换的控制较少:
在所有情况下,结果类型都应正确推断为数字,并且可能推断为管道情况下所需的联合。只需选择您最喜欢的风格和控制级别 :)
佐德游乐场