是的字符串长度测试验证 <= 而不是 ===

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')

在这种情况下使用 ===<= 有什么不同?

谢谢

valundefined时,可选链也会自动将val?.length转换为undefined

等式运算符 === 适用于所有类型的值,包括 undefined,因此即使您 运行 undefined === 15,它仍然有效在 TypeScript 中。

但是,大于和小于运算符(例如 <=)只能与 numbers 一起使用。如果您尝试执行 undefined > 3,TypeScript 会给您一个 Object is possibly undefined 错误。