是的字符串长度测试验证 <= 而不是 ===
Yup string length test validation with <= and not ===
我正在尝试使用 TypeScript 中的 Yup 和 react-hook-form 检查字符串是否小于或等于 30 个字符。
我在 SO 上找到了 来检查字符串长度是否 === 5,它工作得很好,只有我正在寻找的错误处理消息类型。
引用的示例验证在我的模式中应用时按预期工作
title: Yup.string().test('len', 'Title must be exactly 5 characters', val => val?.length === 5).required('Title is required')
但是我的情况发生了变化(检查字符串是否小于或等于 30)我得到了一个 Object is possibly undefined
错误,尽管我认为 ?
应该被覆盖未定义的情况
title: Yup.string().test('len', 'Title must be less than or equal to 30 characters', val => val?.length <= 30).required('Title is required')
在这种情况下使用 ===
和 <=
有什么不同?
谢谢
当val
为undefined
时,可选链也会自动将val?.length
转换为undefined
。
等式运算符 ===
适用于所有类型的值,包括 undefined
,因此即使您 运行 undefined === 15
,它仍然有效在 TypeScript 中。
但是,大于和小于运算符(例如 <=
)只能与 numbers
一起使用。如果您尝试执行 undefined > 3
,TypeScript 会给您一个 Object is possibly undefined
错误。
我正在尝试使用 TypeScript 中的 Yup 和 react-hook-form 检查字符串是否小于或等于 30 个字符。
我在 SO 上找到了
引用的示例验证在我的模式中应用时按预期工作
title: Yup.string().test('len', 'Title must be exactly 5 characters', val => val?.length === 5).required('Title is required')
但是我的情况发生了变化(检查字符串是否小于或等于 30)我得到了一个 Object is possibly undefined
错误,尽管我认为 ?
应该被覆盖未定义的情况
title: Yup.string().test('len', 'Title must be less than or equal to 30 characters', val => val?.length <= 30).required('Title is required')
在这种情况下使用 ===
和 <=
有什么不同?
谢谢
当val
为undefined
时,可选链也会自动将val?.length
转换为undefined
。
等式运算符 ===
适用于所有类型的值,包括 undefined
,因此即使您 运行 undefined === 15
,它仍然有效在 TypeScript 中。
但是,大于和小于运算符(例如 <=
)只能与 numbers
一起使用。如果您尝试执行 undefined > 3
,TypeScript 会给您一个 Object is possibly undefined
错误。