153 votes

Comment utiliser Object.values avec typescript?

J'essaie de former une chaîne séparée par des virgules d'un objet,

 const data = {"Ticket-1.pdf":"8e6e8255-a6e9-4626-9606-4cd255055f71.pdf","Ticket-2.pdf":"106c3613-d976-4331-ab0c-d581576e7ca1.pdf"};
const values = Object.values(data).map(x => x.substr(0, x.length - 4));
const commaJoinedValues = values.join(',');
console.log(commaJoinedValues);
 

Comment faire cela avec TypeScript?

obtenir un fichier d'erreur:

 severity: 'Error'
message: 'Property 'values' does not exist on type 'ObjectConstructor'.'
at: '216,27'
source: 'ts'
 

249voto

Aaron Points 14679

Object.values() est une partie de ES2017, et l'erreur de compilation que vous obtenez est parce que vous avez besoin pour configurer TS pour utiliser le ES2017 de la bibliothèque. Vous êtes probablement en utilisant ES6 ou ES5 bibliothèque dans votre TS de configuration.

Solution: utilisez es2017 ou es2017.object votre --lib option du compilateur.

Par exemple, à l'aide de tsconfig.json:

"compilerOptions": {
    "lib": ["es2017", "dom"]
}

Notez que le ciblage ES2017 avec Tapuscrit ne pas émettre de polyfills dans le navigateur pour ES2017, c'est à vous de le faire dans votre projet vous-même si vous le souhaitez. Et depuis Object.values n'est pas encore bien pris en charge par tous les navigateurs, vous voulez absolument un polyfill: core-js va faire le travail.

125voto

holi-java Points 15887

en utilisant Object.keys à la place.

 const data = {
  a: "first",
  b: "second",
};

const values = Object.keys(data).map(key => data[key]);

const commaJoinedValues = values.join(",");
console.log(commaJoinedValues);
 

20voto

mtpultz Points 403

Vous pouvez utiliser Object.values dans TypeScript en procédant de la sorte (<any>Object).values(data) si, pour une raison quelconque, vous ne pouvez pas mettre à jour vers ES7 dans tsconfig.

11voto

Kian Points 136

Au lieu de

 Object.values(myObject);
 

utilisation

 Object["values"](myObject);
 

Dans votre cas d'exemple:

 const values = Object["values"](data).map(x => x.substr(0, x.length - 4));
 

Cela cachera l'erreur du compilateur ts.

4voto

Neil Stevens Points 992

Je viens de frapper ce problème avec Angular 6 en utilisant la CLI et des espaces de travail pour créer une bibliothèque en utilisant ng g library foo .

Dans mon cas, le problème se trouvait dans les tsconfig.lib.json du dossier de la bibliothèque dans lesquels es2017 n'était pas inclus dans la section lib .

Si vous rencontrez ce problème avec Angular 6, il vous suffit de vous assurer que vous mettez à jour votre tsconfig.lib.json ainsi que votre application tsconfig.json

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X