1
votes

Comment écrire une logique d'opérateur ternaire pour plusieurs conditions et pour un paramètre optionnel?

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;
     }


0 commentaires

3 Réponses :


0
votes

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;


0 commentaires

3
votes

Vous pouvez simplifier la vérification à

return !args.drugName || args.drugName.length > 2;
//     if empty
//                       if longer then 2 characters


0 commentaires

0
votes

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 _.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 ne sera même pas exécuté).


0 commentaires