我正在使用io-ts为一个API做输入验证。我需要确保在requirement对象中没有未声明的属性。
例如,如果我将request的接口定义为:
const Request = t.type({
id: t.string,
name: t.string
});
并且如果输入如下:
const req = {
id: 'r1',
name: 'req 1',
description: 'desc' // property "description" is not declaration on Request type.
}
然后我做如下验证:
const r = Request.decode(req);
if (isLeft(r)) {
console.log(PathReporter.report(r));
} else {
console.log("validate success");
}
我希望输出是未声明属性的错误。但它成功了。
有没有办法做基于io-ts的严格验证?
2条答案
按热度按时间qvk1mo1f1#
我找到了这个问题的解决方法。
https://github.com/gcanti/io-ts/issues/322#issuecomment-513170377
l7wslrjt2#
严格来说,这并不是对您问题的回答,但
io-ts
也提供了strict
,它将忽略输入对象中未在编解码器上声明的任何属性。(而type
将保留此类附加属性。)strict
是exact(type(...))
的别名。当然,这并不能真正帮助您进行验证,但是在相关的用例中,能够剥离附加属性可能会有所帮助。