essayant d'écrire la logique pour mes fonctions de validation qui ont des objets que nous utilisons comme errorMap pour la validation d'entrée, pour la logique ci-dessous args.drugName est un champ facultatif si l'utilisateur fournit du texte, nous voulons simplement nous assurer qu'il supérieur à 3 lettres ou en cas de succès vide, la condition doit être valide. Donc, pour le paramètre facultatif dans le typographie, comment résoudre ce problème?
main.js
error TS2532: Object is possibly 'undefined'.
Erreur;
{
errorKey: ValidationErrorEnum.InvalidDrugName,
successCondition: (args: DrugPriceParam) => {
let isValid: boolean = false;
isValid = args.drugName.length >= 3 ? true : _.isEmpty(args.drugName) ? true : false;
// if (args.drugName && args.drugName.length >= 3) {
// isValid = true;
// } else if (_.isEmpty(args.drugName)) {
// isValid = true;
// }
return isValid;
}
3 Réponses :
C'est la même chose que vous écrivez si la condition
args?.drugName?.length >= 3 ? true : _.isEmpty(args.drugName) ? true : false;
Il y a une nouvelle fonctionnalité à venir dans js - chaînage facultatif. vous pouvez l'utiliser actuellement en utilisant le plugin webpack. https://github.com/tc39/proposal-optional-chaining p >
En utilisant ceci, nous pouvons simplement écrire
(args.drugName && args.drugName.length >= 3) ? true : _.isEmpty(args.drugName) ? true : false;
Vous pouvez simplifier la vérification à
return !args.drugName || args.drugName.length > 2; // if empty // if longer then 2 characters
Comme vous renvoyez simplement des booléens, vous n'avez pas besoin d'utiliser l'opérateur ternaire. Vous devriez pouvoir simplement passer le résultat des opérations de comparaison:
// if (args.drugName && args.drugName.length >= 3) {
// isValid = true;
// } else if (_.isEmpty(args.drugName)) {
// isValid = true;
// }
// Becomes:
isValid = (args.drugName && args.drugName.length >= 3) || _.isEmpty(args.drugName);
N'oubliez pas les courts-circuits, soit: Si la première moitié du code || > est trouvé vrai, alors ne sera même pas exécuté). _.isEmpty ne sera même pas exécuté (et de même, si la première moitié de && s'avère fausse, alors ... length> = 3