web-dev-qa-db-fra.com

Syntaxe succincte / concise pour les clés d'objet «facultatives» dans ES6 / ES7?

Il y a déjà beaucoup de fonctionnalités intéressantes dans ES6/ES7 pour définir des objets Javascript. Cependant, le modèle suivant est commun en Javascript:

const obj = { 
  requiredKey1: ..., 
  requiredKey2: ... 
};

if (someCondition) { 
  obj.optionalKey1 = ...;
}

Existe-t-il un moyen de définir l'objet à la fois avec les clés optionnelles et obligatoires?

28
Andrew Mao

Vous pouvez utiliser propagation d'objet pour avoir une propriété facultative.

Remarque: Object Rest/Spread est une proposition de l'étape 4 pour ECMAScript. Vous pourriez avoir besoin de babel transform pour l'utiliser.

let flag1 = true;
let flag2 = false;

const obj = { 
  requiredKey1: 1, 
  requiredKey2: 2,
  ...(flag1 && { optionalKey1: 5 }),
  ...(flag2 && { optionalKey2: 6, optionalKey3: 7 }),
  ...(flag1 && { optionalKey4: 8, optionalKey5: 9 })
};

console.log(obj);
57
Ori Drori

Pour indiquer la touche optional, vous pouvez lui affecter null, si la condition est fausse

const someCondition = true;

const obj = { 
  requiredKey1: 1, 
  requiredKey2: 2,
  optionalKey1: someCondition ? 'optional' : null
};

console.log(obj);
3
Suren Srapyan

le modèle suivant est commun en Javascript

Ça ne devrait pas. Le fait d'avoir de nombreux objets de formes différentes peut entraîner une baisse des performances. Les enregistrements doivent toujours contenir les mêmes clés. Il suffit donc d'utiliser

const obj = { 
  requiredKey1: …, 
  requiredKey2: …,
  optionalKey1: someCondition ? … : undefined,
};
0
Bergi