我使用yup来验证和键入来自API的数据.我有以下验证器和类型:

export const someSchema = object({
  id: number().required(),
  name: string().required(),
  someArray: array().of(string()),
  date: dateSchema,
}).from('date', 'startDate')

export const someListSchema = array().of(someSchema)

export type SomeType = InferType<typeof someSchema>;

它的工作方式非常出色,数组得到了完美的验证,类型被假定为预期的类型.

唯一的问题是我如何验证数组,方法如下:

await someListSchema.validate(data)

如果数组中的任何元素不满足验证器要求,它就会抛出一个错误,整个验证过程就会失败.我希望删除无效的数组元素并返回数组的其余部分.How to proceed validation with filtering out invalid elements and keeping valid?

我try 了选项{ abortEarly: false },也try 了迭代通过数组对每个元素进行验证的方法,但没有成功.对如何达到预期效果有什么建议吗?

向您致敬, 巴托斯.

推荐答案

您可以遍历数组并逐个验证对象.这样,您就可以定义自己的逻辑,说明当对象未通过验证时希望发生的情况.

例如,

export const someSchema = object({
  id: number().required(),
  name: string().required(),
  someArray: array().of(string()),
  date: dateSchema,
}).from('date', 'startDate');

const results = await Promise.allSettled(data.map((object) => someSchema.validate(object)));
const filteredResults = results.filter(({status}) => status === "fulfilled").map(({value}) => value); 

Javascript相关问答推荐

为什么我的useDispatch挂钩在这里设置不正确?

未使用Outlet渲染子组件

将音频记录从js发送到activx-web服务器以保存到磁盘

在具有焦点和上下文的d3多线图表中,如何将上下文的刷新限制在特定日期?

如何在JavaScript中在文本内容中添加新行

使用json文件字符串来enum显示类型字符串无法按照计算的enum成员值的要求分配给类型号

materialized - activeIndex返回-1

yarn安装一个本地npm包,以便本地包使用main项目的node_modules(ckeditor-duplicated-modules错误)

如何解决CORS政策的问题

Angular中计算信号和getter的区别

在Vite React库中添加子模块路径

在我的html表单中的用户输入没有被传送到我的google表单中

在286之后恢复轮询

如何避免页面第一次加载时由于CSS样式通过JavaScript更改而出现闪烁

保持物品顺序的可变大小物品分配到平衡组的算法

如何在ASP.NET中使用Google Charts API JavaScript将条形图标签显示为绝对值而不是负值

基于props 类型的不同props ,根据来自接口的值扩展类型

在使用REACT更改了CSS类之后,无法更改CSS样式

如何根据查询结果重新排列日期

react 路由如何使用从加载器返回的数据