是的:如何在投射失败后获得错误信息?
Yup: how to get error message after failed cast?
我正在使用 yup
进行验证,我想尝试这种令人惊叹的 cast 方法,但是文档中并不清楚,我如何在失败的情况? cast
转换和验证并 returns 结果或 returns null
就是这样。这是不可接受的 - 我还需要一条错误消息。同时我不想 运行 它两次,比如 - 一次用于验证,一次用于转换。
cast either transforms and validates and returns the result or returns null and that's it
cast
不 validate
结果 - 它只是转换它。 validate(Sync)/isValid(Sync)
强制转换然后验证。
如果你想在转换失败的情况下提供关于特定模式的错误消息,你可以使用 typeError
At the same time I wouldn't want to run it twice, like - once for validation, once for cast.
正如我所说,验证方法总是在验证之前先 运行 转换(如果转换失败,则不会 运行 验证)。如果你想要转换和验证功能,那么你只需调用验证方法,它 returns 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),
- 注释部分是不必要的并在转换中替换
- 之所以抛出nested Validation Error,完全是因为我的错误解析逻辑。
我正在使用 yup
进行验证,我想尝试这种令人惊叹的 cast 方法,但是文档中并不清楚,我如何在失败的情况? cast
转换和验证并 returns 结果或 returns null
就是这样。这是不可接受的 - 我还需要一条错误消息。同时我不想 运行 它两次,比如 - 一次用于验证,一次用于转换。
cast either transforms and validates and returns the result or returns null and that's it
cast
不 validate
结果 - 它只是转换它。 validate(Sync)/isValid(Sync)
强制转换然后验证。
如果你想在转换失败的情况下提供关于特定模式的错误消息,你可以使用 typeError
At the same time I wouldn't want to run it twice, like - once for validation, once for cast.
正如我所说,验证方法总是在验证之前先 运行 转换(如果转换失败,则不会 运行 验证)。如果你想要转换和验证功能,那么你只需调用验证方法,它 returns 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),
- 注释部分是不必要的并在转换中替换
- 之所以抛出nested Validation Error,完全是因为我的错误解析逻辑。