Cập nhật : Với Typescript 2.3, bây giờ bạn có thể thêm "downlevelIteration": true
vào tsconfig của mình và điều này sẽ hoạt động khi nhắm mục tiêu ES5.
Nhược điểm của downlevelIteration
nó là TS sẽ phải tiêm khá nhiều boilerplate khi chuyển vị. Một dòng duy nhất từ câu hỏi chuyển tiếp với 21 dòng bảng soạn sẵn được thêm vào: (kể từ Loại chỉ số 2.6.1)
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spread = (this && this.__spread) || function () {
for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
return ar;
};
var uniques = __spread(new Set([1, 2, 3, 1, 1]));
console.log(uniques);
Bản soạn sẵn này sẽ được đưa vào một lần cho mỗi tệp sử dụng lặp lại cấp độ thấp và bản trình tự này có thể được giảm bớt bằng cách sử dụng "importHelpers"
tùy chọn thông qua tsconfig. (Xem bài đăng blog này về lặp lại cấp độ thấp hơn và importHelpers
)
Ngoài ra, nếu hỗ trợ ES5 không quan trọng đối với bạn, bạn luôn có thể nhắm mục tiêu "es6" ngay từ đầu, trong trường hợp đó mã gốc hoạt động mà không cần cờ "downlevelIteration".
Câu trả lời ban đầu:
Đây dường như là một câu trả lời sai cách chuyển mã ES6. Các ...
nhà điều hành nên làm việc trên bất cứ điều gì mà có một tài sản iterator, (Accessed bằng obj[Symbol.iterator]
) và Bộ có tài sản đó.
Để làm việc này, bạn có thể sử dụng Array.from
để chuyển đổi các thiết lập để một mảng đầu tiên: ...Array.from(new Set([1, 2, 3, 1, 1]))
.