2017-01-21 58 views
5

Tôi muốn trích xuất tất cả các thuộc tính độc đáo từ một mảng của các đối tượng, bạn có thể làm như vậy trong ES6 rất sạch sử dụng toán tử lây lan và Set vậy:Liệu nguyên cảo có một tương đương với ES6 "Thiết lập"

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] 

Tuy nhiên, trong nguyên cảo 1.8.31 này mang lại cho tôi những lỗi build:

Cannot find name 'Set'

tôi biết tôi có thể buộc VS để bỏ qua nó bằng cách sử dụng

declare var Set; 

Nhưng tôi hy vọng cho một thứ gì đó TypeScript sẽ biên dịch thành phi ES6 để nó có thể được sử dụng trên các hệ thống cũ hơn.

Có ai biết nếu có một tính năng như vậy tôi có thể sử dụng không?

Sửa:

Trên thực tế, ngay cả khi tôi sử dụng declare var Set;, các mã trên biên dịch nhưng throws lỗi này lặp đi lặp lại, vì vậy tôi không chắc chắn làm thế nào để sử dụng nó ngay cả khi không biên dịch xuống:

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

Tôi làm cách nào để cập nhật mã của mình để sử dụng Set trong TypeScript?

+2

trùng lặp có thể xảy ra của [kiễu góc 2 nguyên cảo không thể tìm thấy tên] (http: // stackoverflow .com/questions/33332394/angular-2-typescript-cant-find-names) – jonrsharpe

+0

TS không cần phải có tương đương với điều này, bởi vì TS transpiles thành JS, và 'Set' là tính năng JS có thể nhúng được. Đây là một bản sao, http://stackoverflow.com/a/41608156/3731501 nói riêng. – estus

+1

Tôi cho rằng bạn cũng có thể [biên dịch mã số thành mã ES6] (http://stackoverflow.com/questions/30439869/can-typescript-compile-to-es6-code) và sau đó chuyển nó sang ES5 với cái gì đó giống như babel. Điều đó sẽ cho phép bạn sử dụng tất cả các bộ sưu tập ES6. – jfriend00

Trả lời

2

Không. Nếu bạn biên dịch sang ES5 hoặc cũ hơn, chỉ có thể thêm các thay đổi cú pháp từ ES6. Nó không thêm bất kỳ đối tượng thư viện chuẩn nào.

Nếu bạn muốn những người tôi đề nghị bạn nhìn vào một cái gì đó giống như core.js

0

Bạn có thể sử dụng type script library này. Hoặc có thể tạo một lớp học được đặt bằng cách sử dụng tham chiếu từ thư viện này

1

Điều này phù hợp với tôi.

Một trong những vấn đề dường như là nguyên cảo rằng trys để sử dụng

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

thay vì Array.from();

trong mọi trường hợp mã này làm việc cho tôi trong góc 4 Application tôi

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

hy vọng này sẽ giúp người

Các vấn đề liên quan