yup验证中的对象数组不起作用

时间:2020-09-13 16:34:21

标签: yup

    export const licenseKeySchema = yup
      .object<Partial<apiTypes.LicenseKey>>()
      .shape({
        username: yup.string().required(),
        lastUpdatedOn: yup.number().required(),
        licenseKey: yup.string().required(),
        expiry: yup.number().required()
      });
    
    export const endpointSchema = yup.object<Partial<apiTypes.Endpoint>>({
      hostname: yup.string().required(),
      ipAddress: yup.string().required(),
      lcmIdentifier: yup.string().required(),
      licenseKeys: yup.array().of(licenseKeySchema).required()
    });
    
    
    export interface LicenseKey {
      vmid: string;
      createdBy: string;
      lastModifiedBy: string;
      createdOn: number;
      lastUpdatedOn: number;
      properties?: any;
      username: string;
      hostname: string;
      lcmIdentifier: string;
      licenseKey: string;
      orgId: string;
      accessKey: string;
      lemansGatewayUri: string;
      message?: string;
      accessKeyLink: string;
      expiry: number;
      lastHeartBeat?: any;
      ipAddress: string;
    }
    
    export interface Endpoint {
      hostname: string;
      licenseKeys: LicenseKey[];
      ipAddress: string;
      lcmIdentifie

 }

得到以下错误类型'ArraySchema >'不可分配给类型 'MixedSchema 。 这些类型之间'nullable(...)。nullable'的类型不兼容。 类型'{(isNullable ?: true |未定义):NullableArraySchema >; (isNullable:false):ArraySchema <...>; (是否为空?: 布尔|未定义):ArraySchema <...>; }'不可分配给type '{(isNullable ?: true |未定义):MixedSchema ; (isNullable:否):MixedSchema ; (isNullable ?:布尔|未定义):MixedSchema <...>; }'。 参数“ isNullable”和“ isNullable”的类型不兼容。 类型'false'不能分配给类型'true |未定义”。

1 个答案:

答案 0 :(得分:0)

您声明自己的licenseKeySchemaPartial的{​​{1}}:

LicenseKey

所以您必须在 export const licenseKeySchema = yup .object<Partial<apiTypes.LicenseKey>>() <- this line .shape({ ... }) 中做同样的事情:

Endpoint

编辑:

这里是堆叠闪电战:https://stackblitz.com/edit/typescript-yxmshr?file=yup.ts

其中有一个错误。取消注释行并在 export interface Endpoint { hostname: string; licenseKeys: Partial<LicenseKey>[]; <- this line ipAddress: string; ... } 界面中注释掉它上方的行后,它就会起作用。