首页 > 解决方案 > 类型“NumberSchema”上不存在属性“长度”

问题描述

我收到标题中提到的错误。我知道错误是什么,但不知道如何解决它。

基本上我正在使用“是的”进行验证。

添加了自定义方法

Yup.addMethod(Yup.number, 'length', function (length: number, message: string) {
  const tmessage = (typeof message == 'undefined') ? 'length must be ' + length : message;
    return Yup.number().test('length',tmessage,function(value: string | number) {
      return (typeof value == 'undefined') ? true : (value.toString().length === this.resolve(length));
    });
});

定义验证模式

const validationSchema = Yup.object({
  name: Yup.string().required('Name is required'),
  email: Yup.string().email('Invalid Email').required('Email id required'),
  mobile: Yup.number().required('Mobile is required').length(10),
  message: Yup.string().required('Message is required')
});

我在线收到打字稿错误

mobile: Yup.number().required('Mobile is required').length(10),

标签: javascriptreactjstypescriptyup

解决方案


您可以增加模块的类型定义,如https://github.com/jquense/yup/issues/312#issuecomment-422666195中所述。在您的情况下,在您的项目中创建任何.d.ts文件并插入:

declare module "yup" {
    interface NumberSchema<T extends number | null | undefined = number> {
        length(length: number, message: string): NumberSchema<T>;
    }
}

或者不是理想但简单的解决方案:使用(Yup as any).number().required('Mobile is required').length(10).


推荐阅读