1
votes

Paramètres en fonction, certains d'entre eux sont optionnels certains obligatoires

J'ai une fonction où j'ai des paramètres, certains d'entre eux sont facultatifs, certains obligatoires, par exemple

example(page: number, perPage: number, name?: string, status?: boolean) {
    if (name !== null) {
        // body
    }
    if (status !== null) {
       // body
    }
}

Parfois je l'appelle avec seulement status p >

example(1, 25, null, true);

Cela signifie que true il y aura comme nom ce qui n'est pas la façon dont je veux faire cela. Changer l'ordre dans la déclaration de fonction n'aide pas parce que parfois je n'ai que le name .

J'essayais quelque chose comme ça, et dans mon service vérifie si le paramètre n'est pas égal à null .

example(1, 25, true);

example.service.ts

example(page: number, perPage: number, name?: string, status?: boolean) {
    // Body
}

Mais je ne pense pas que ce soit la meilleure façon de gérer cela.


0 commentaires

4 Réponses :


5
votes

Pas sûr, mais avez-vous essayé de passer un objet au lieu d'une liste d'arguments?

example(data: {page: number, perPage: number, name?: string, status?: boolean}) {
  //code goes here
}
example({page: 1, perPage: 25, status: true})

Dans ce cas, vous obtiendrez la valeur exacte que vous avez passée dans l'objet


0 commentaires

1
votes

Il existe plusieurs façons de gérer cela. La première consiste à passer le troisième argument comme indéfini

example({page: 1, perPage: 25, status: true});

// in your function you can use destructuring for brevity

interface Options {
  page: number; perPage: number; name?: string; status?: boolean;
}

example(options: Options) {
   const {page, perPage, name, status} = options
    // Body
}

Une autre façon est d'accepter un seul argument qui est un objet

interface Options {
  page: numberl; perPage: number; name?: string; status?: boolean;
}

Ceci fait que votre fonction se comporte comme elle prend des arguments nommés.

example(1, 25, undefined, true);


0 commentaires

1
votes

Lorsque vous ne transmettez aucune valeur à un paramètre facultatif, leur valeur devient indéfinie (Source: docs ). Vous pouvez donc simplement passer undefined pour ce paramètre particulier.

Pour appeler example () avec uniquement status

example(1, 25, undefined, true);


0 commentaires

0
votes

Passez simplement le paramètre sous forme d'objet et itérez cet objet dans la méthode

example(paramObj) {
    //iterate params here
    let paramArr = Object.keys(paramObj)

}

//calling
example({name:'Xyz Person'});


0 commentaires