Typescript 未使用io ts进行未定义验证的数组

Typescript 未使用io ts进行未定义验证的数组,typescript,validation,Typescript,Validation,我们正在使用验证来自HTTP服务的外部数据。我已经编写了一个编解码器,它接受另一个编解码器C,并返回或,但实际上从未失败(只是为了满足t.Type)。这是因为我们从服务中获得了一个不同类型的数组,将来可以添加新的数组,因此我们希望它继续工作,但忽略那些未定义的数组。看起来像: 导出函数tryDecode( 编解码器:C, onLeft?:(验证:io.validation)=>void, ) { 返回新的io.Type( “tryDecode”, (输入:未知):输入为C |未定义=>{ 返回c

我们正在使用验证来自HTTP服务的外部数据。我已经编写了一个编解码器,它接受另一个编解码器
C
,并返回
,但实际上从未失败(只是为了满足
t.Type
)。这是因为我们从服务中获得了一个不同类型的数组,将来可以添加新的数组,因此我们希望它继续工作,但忽略那些未定义的数组。看起来像:

导出函数tryDecode(
编解码器:C,
onLeft?:(验证:io.validation)=>void,
) {
返回新的io.Type(
“tryDecode”,
(输入:未知):输入为C |未定义=>{
返回codec.is(输入)| |输入===未定义;
},
(u,c)=>{
const validation=codec.validate(u,c);
回折(
() => {
如果(仅左){
onLeft(验证);
}
返回io.success(未定义为C |未定义);
},
(右:C |未定义)=>io.success(右),
)(验证);
},
io.identity,
);
}
我正在尝试编写一个编解码器
arraywhithoutundefined
,它的工作原理与
io.array
类似,但会删除任何未定义的元素。它不应该失败(除非它不是数组)。我迄今为止的努力:

export函数数组未定义(
编解码器:C,
name=`arrayWithoutUndefined`,
) {
常数arr=io.array(编解码器);
返回新的io.Type(
名称
(u) :u is Array=>arr.is(u)和&!u.includes(未定义),
(u,c)=>
.chain(codec.validate(u,c),as=>
io.success(作为.filter(未定义)),
),
arr.encode,
);
}

notUndefined
是一个助手,它确保
(a:a | undefined):a是a=>…
。然后我将它们作为
const Modules=arrayWithout undefined(tryDecode(unionof differentmodules))
一起使用,但是当我希望它只是
Array
时,模块仍然表示为
Array
。这是否可以用TypeScript/io ts来表达?我研究了条件类型,但不幸的是不知道如何表达。

这个问题可能已经解决了,因为它支持数组筛选器语句中的类型保护

t.Type
的显式泛型也可能在这里有所帮助

type Subtract=A扩展了B?从不:A;
返回io.Type(…);