web-dev-qa-db-fra.com

TypeScript a-t-il un équivalent de "Sets" ES6

Je veux extraire toutes les propriétés uniques d'un tableau d'objets, vous pouvez le faire dans ES6 très proprement en utilisant l'opérateur de propagation et le Set donc:

var arr = [ {foo:1, bar:2}, {foo:2, bar:3}, {foo:3, bar:3} ]   
const uniqueBars = [... new Set(arr.map(obj => obj.bar))];

>> [2, 3]

Cependant, dans TypeScript 1.8.31, cela me donne l'erreur de construction:

Impossible de trouver le nom 'Set'

Je sais que je peux forcer VS à l'ignorer en utilisant

declare var Set;

Mais j'espère quelque chose que TypeScript compilera en non-ES6 afin qu'il puisse être utilisé sur des systèmes plus anciens.

Est-ce que quelqu'un sait s'il existe une telle fonctionnalité que je pourrais utiliser?

Modifier :

En fait, même lorsque j'utilise declare var Set;, le code ci-dessus se compile mais renvoie cette erreur à plusieurs reprises, donc je ne sais pas comment l'utiliser même sans compiler:

TypeError non capturé: (valeur intermédiaire) .slice n'est pas une fonction

Comment mettre à jour mon code pour utiliser Set dans TypeScript?

11
Charles Clayton

Non. Si vous compilez vers ES5 ou une version antérieure de TypeScript, seules les modifications syntaxiques par rapport à ES6 sont ajoutées. Il n'ajoute aucun des objets de bibliothèque standard.

Si vous en voulez, je vous suggère de regarder quelque chose comme core.js

2
toskv

Cela a fonctionné pour moi.

L'un des problèmes semble être que les essais TypeScript à utiliser

ERROR TypeError: (intermediate value).slice is not a function

au lieu de Array.from ();

en tout cas ce code a fonctionné pour moi dans mon Angular 4 applicaiton

Array.from(new Set(Array)).sort(this.compareNumbers)

j'espère que cela aide quelqu'un

2
Christian Matthew

Vous pouvez utiliser ceci type bibliothèque de scripts . Ou peut-être créer votre classe d'ensemble en utilisant la référence de cette bibliothèque

1
Yogesh