我有一个对象数组,其中每个对象都有这样的值true/false。我在这些选项的基础上准备了一系列对象。
const getValidatorForField = (customField: ICustomFieldProps) => {
if (customField !== undefined) {
let validaionObject: any = {};
const { type, contact } = customField
const {
nameRequired,
emailRequired,
phoneRequired,
extensionRequired,
} = contact
if (type === 'contact') {
validaionObject.name = nameRequired ? Yup.string().required(DEFAULT_ERROR_MESSAGES.REQUIRED) : Yup.string();
validaionObject.email = emailRequired ? Yup.string().email(DEFAULT_ERROR_MESSAGES.EMAIL).required(DEFAULT_ERROR_MESSAGES.REQUIRED) : Yup.string();
validaionObject.phoneNumber = phoneRequired ? Yup.string().phone('US', false, DEFAULT_ERROR_MESSAGES.PHONE).required(DEFAULT_ERROR_MESSAGES.REQUIRED) : Yup.string();
validaionObject.extension = extensionRequired ? Yup.string().required(DEFAULT_ERROR_MESSAGES.REQUIRED) : Yup.string();
return Yup.object(validaionObject).shape({});
} else {
return null;
}
} else {
return null;
}
};
const fieldValidators = (customFields: ICustomFieldProps[]) => {
let tuple: any = customFields.map((val) => {
return getValidatorForField(val)
})
return removeEmptyObjects(tuple);
}
使用上面的代码,它为我提供了一个对象数组,每个字段都有自定义验证,但我无法在中使用此数组
const stakeHolderStepValidation = (customFields: ICustomFieldProps[]) => {
console.log(customFields)
const validationObjects = customFields !== undefined ? fieldValidators(customFields) : customContactValidtion
return Yup.object().shape({
ownerToggle: Yup.boolean(),
owners: Yup.array().of(ownerValidation),
stakeholders: Yup.array().of(stakeHolderValidation),
customContacts: Yup.array().of(validationObjects[0]),
})
};
这条线路
customContacts: Yup.array().of(validationObjects[0]),
如果我放置完整的数组,作为
validationObjects
它失败了,如果我把它和一个索引值放在一起,它会把第一条规则应用到每个元素。我看到Tuple在新版本的Yup中引入了一种新方法,但我使用的是旧版本,我想使用它。
摘要:
我有一个自定义验证对象数组,我想将其用作数组。任何帮助都会很棒。