2017-01-21 2 views
5

Я хочу, чтобы извлечь все уникальные свойства из массива объектов, вы можете сделать это в ES6 очень аккуратно, используя оператор раздвигания и Set так:ли машинопись есть эквивалент ES6 «Установка»

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] 

Однако в машинописном 1.8.31 это дает мне ошибку сборки:

Cannot find name 'Set'

Я знаю, что я могу заставить VS игнорировать его с помощью

declare var Set; 

Но я надеюсь на что-то, что TypeScript будет компилироваться в не-ES6, чтобы его можно было использовать в старых системах.

Кто-нибудь знает, есть ли такая возможность, которую я мог бы использовать?

Edit:

На самом деле, даже когда я использую declare var Set;, приведенный выше код компилируется, но выдает эту ошибку несколько раз, так что я не знаю, как использовать его, даже без компиляции вниз:

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

Как я могу обновить свой код, чтобы использовать Set в TypeScript?

+2

Возможный дубликат [Угловое 2 машинописи не могут найти имена] (Http: // StackOverflow .com/questions/33332394/angular-2-typescript-can-find-names) – jonrsharpe

+0

TS не обязательно должен иметь эквивалент этого, потому что TS переводится в JS, а 'Set' является многозадачной функцией JS. Это дубликат, в частности, http://stackoverflow.com/a/41608156/3731501. – estus

+1

Я полагаю, вы могли бы также [скомпилировать машинописный код для кода ES6] (http://stackoverflow.com/questions/30439869/can-typescript-compile-to-es6-code), а затем перевести это на ES5 с помощью чего-то вроде babel. Это позволит вам использовать все коллекции ES6. – jfriend00

ответ

2

Нет. Если вы скомпилируете ES5 или более позднюю версию, только добавляет синтаксические изменения из ES6. Он не добавляет ни один из стандартных объектов библиотеки.

Если вы хотите, те, которые я предлагаю вам взглянуть на то, как core.js

0

Вы можете использовать этот type script library. Или, возможно, создайте свой один класс, используя ссылку из этой библиотеки.

1

Это сработало для меня.

Одним из вопросов, как представляется, что машинопись пробует использовать

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

вместо Array.from();

в любом случае этот код работал для меня в моей угловыми 4 applicaiton

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

надеюсь, что это поможет кому-то

Смежные вопросы