web-dev-qa-db-ja.com

TypeScriptには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]

ただし、TypeScript 1.8.31では、これによりビルドエラーが発生します。

名前 'Set'が見つかりません

私はVSを使用してそれを無視させることができることを知っています

declare var Set;

しかし、古いシステムで使用できるように、TypeScriptが非ES6にコンパイルされるものを期待しています。

私が使用できるそのような機能があるかどうか誰もが知っていますか?

編集

実際、declare var Set;を使用する場合でも、上記のコードはコンパイルされますが、このエラーが繰り返しスローされるため、コンパイルせずに使用する方法がわかりません。

Uncaught TypeError:(中間値).sliceは関数ではありません

TypeScriptでSetを使用するようにコードを更新するにはどうすればよいですか?

11
Charles Clayton

いいえ。ES5以前のTypeScriptにコンパイルする場合、ES6からの構文の変更のみが追加されます。標準ライブラリオブジェクトは追加されません。

これらが必要な場合は、 core.js のようなものを調べることをお勧めします

2
toskv

これは私のために働いた。

問題の1つは、TypeScriptが使用しようとすることです

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

array.from()の代わりに;

いずれにしても、このコードは私のAngular 4アプリケーションで私のために働いた

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

これが誰かを助けることを願って

2

これを使用できます type script library 。または、このライブラリからの参照を使用して、1つのセットクラスを作成することもできます

1
Yogesh