是的:试镜失败后如何得到错误信息



我正在使用yup进行验证,我想尝试一种令人惊叹的强制转换方法,但从文档中还不清楚,在失败的情况下如何获得错误消息?cast要么转换并验证并返回结果,要么返回null。这是不可接受的——我还需要一条错误消息。同时,我不想运行两次,比如一次用于验证,一次用于强制转换。

cast要么转换并验证并返回结果,要么返回null,这就是

castvalidate结果-它只是对其进行转换。validate(Sync)/isValid(Sync)进行强制转换,然后进行验证。

如果您想在转换失败的情况下提供特定模式的错误消息,请使用typeError

同时我不想运行两次,比如一次用于验证,一次用于强制转换。

正如我所说,validate方法总是在验证之前先运行强制转换(如果强制转换失败,则不运行验证(。如果你想要强制转换和验证功能,那么你只需要调用验证方法,它就会返回cast结果(如果有效(——除非你只想强制转换(不进行验证(,否则你不需要调用cast

您可以随时抛出验证错误

以下是我的完整实现:

phone: yup
.string()
// .test('is-valid', 'phone.invalid', async (value) => {
//   if (typeof value === 'string') {
//     const number = phoneUtil.parseAndKeepRawInput(value, 'TR');
//     return phoneUtil.isValidNumber(number);
//   }
//   return false;
// })
.transform((value) => {
if (typeof value === 'string') {
const number = phoneUtil.parse(value, 'TR');
if (phoneUtil.isValidNumber(number)) {
return phoneUtil.format(number, PhoneNumberFormat.E164);
}
}
throw new ValidationError(
new ValidationError('phone.invalid', value, 'phone', 'is-valid')
);
})
.required()
.nullable(false),
  • 注释部分是不必要的,并在转换中被替换
  • 抛出嵌套Validation Error的原因完全是因为我的错误解析逻辑

相关内容

  • 没有找到相关文章

最新更新