2017-01-21 19 views
5

chcę wyodrębnić wszystkie unikalne właściwości z tablicy obiektów, można to zrobić w ES6 bardzo czysto pomocą operatora spread i Set więc:Does maszynopis mieć równowartość ES6 „Zestawy”

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] 

jednak w maszynopisie 1.8.31 to daje mi błąd kompilacji:

Cannot find name 'Set'

wiem, że mogę zmusić VS ignorować go za pomocą

declare var Set; 

Mam jednak nadzieję, że coś, co TypeScript skompiluje do wersji innej niż ES6, będzie mogło być używane w starszych systemach.

Czy ktoś wie, czy jest taka funkcja, której mógłbym użyć?

Edit:

Faktycznie, nawet gdy używam declare var Set;, powyższy kod kompiluje ale rzuca ten błąd wielokrotnie, więc nie jestem pewien, jak go używać nawet bez kompilowania dół:

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

Jak mogę zaktualizować mój kod, aby użyć formatu Set w TypeScript?

+2

Możliwy duplikat [Kątowymi 2 maszynopisu nie można znaleźć nazwy] (http: // stackoverflow .com/questions/33332394/angular-2-typescript-cant-find-names) – jonrsharpe

+0

TS nie musi mieć odpowiednika tego, ponieważ TS transponuje do JS, a 'Set' jest funkcją JS z funkcją wielokrotnego napełniania. Jest to w szczególności duplikat, http://stackoverflow.com/a/41608156/3731501. – estus

+1

Przypuszczam, że można również [skompilować maszynę do kodu ES6] (http://stackoverflow.com/questions/30439869/can-typescript-compile-to-es6-code), a następnie przenieść ją do ES5 z czymś podobnym do babel. To pozwoliłoby ci używać wszystkich kolekcji ES6. – jfriend00

Odpowiedz

2

Nie. Jeśli kompilujesz do wersji ES5 lub starszej, maszynopis tylko dodaje zmiany składniowe z ES6. Nie dodaje żadnych standardowych obiektów biblioteki.

Jeśli chcesz tych, proponuję spojrzeć na coś jak core.js

1

To zadziałało dla mnie.

Jednym z problemów, wydaje się, że maszynopis co¶ używać

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

zamiast Array.from();

w każdym razie ten kod pracował dla mnie w moim Kątowymi 4 applicaiton

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

nadzieję, że to pomoże komuś