2017-01-21 8 views
5

ich alle die einzigartigen Eigenschaften von einem Array von Objekten extrahieren möchten, können Sie dies in ES6 sehr sauber, die Ausbreitung Operator und die Set so:Does Typoskript haben ein Äquivalent ES6 „Sets“

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] 

jedoch in Typoskript 1.8.31 das gibt mir die Build-Fehler:

Cannot find name 'Set'

ich weiß, ich VS es

declare var Set; 
012 durch die Verwendung zu ignorieren erzwingen

Aber ich hoffe auf etwas, das TypeScript in Nicht-ES6 kompiliert, so dass es auf älteren Systemen verwendet werden könnte.

Weiß jemand, ob es solch eine Eigenschaft gibt, die ich verwenden könnte?

bearbeiten:

Eigentlich, auch wenn ich declare var Set; verwenden, kompiliert der obige Code aber wirft diesen Fehler wiederholt, so dass ich bin mir nicht sicher, wie es zu benutzen, auch ohne Kompilieren unten:

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

Wie kann ich meinen Code aktualisieren, um Set in TypeScript zu verwenden?

+2

Mögliche Duplikat [Angular 2 Typoskript kann keine Namen finden] (http: // Stackoverflow .com/questions/33332394/angular-2-typescript-cant-find-Namen) – jonrsharpe

+0

TS muss nicht gleichwertig sein, da TS nach JS transpiliert, und 'Set' ist polyfillable JS-Funktion. Dies ist ein Duplikat, insbesondere http://stackoverflow.com/a/41608156/3731501. – estus

+1

Ich nehme an, Sie könnten auch [das Typoskript zu ES6-Code kompilieren] (http://stackoverflow.com/questions/30439869/can-typescript-compile-to-es6-code) und dann das zu ES5 mit etwas wie babel transpilieren. Damit können Sie alle ES6-Sammlungen verwenden. – jfriend00

Antwort

2

Nein. Wenn Sie nach ES5 oder älter kompilieren, fügt Typescript nur die syntaktischen Änderungen von ES6 hinzu. Es fügt keine der Standardbibliotheksobjekte hinzu.

Wenn Sie diejenigen, mögt ich vorschlagen, dass Sie schauen in so etwas wie core.js

0

Sie diese type script library verwenden kann. Oder vielleicht erstellen Sie Ihre One-Set-Klasse mit Referenz aus dieser Bibliothek

1

Dies funktionierte für mich.

Eines der Probleme scheint, dass Typoskript zu sein Trys

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

statt Array.from() zu verwenden;

auf jeden Fall dieser Code für mich in meinem Angular 4 applicaiton arbeitete

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

Hoffnung dies jemand hilft

Verwandte Themen