Pembaruan : Dengan Typecript 2.3, Anda sekarang dapat menambahkan "downlevelIteration": true
ke tsconfig Anda, dan ini akan bekerja sambil menargetkan ES5.
Sisi negatifnya downlevelIteration
adalah TS harus menginjeksikan cukup banyak boilerplate saat transpiling. Satu baris dari pertanyaan tersebut transparan dengan 21 baris boilerplate yang ditambahkan: (sesuai dengan Ketikan 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);
Boilerplate ini akan diinjeksi satu kali per file yang menggunakan iterasi downlevel, dan boilerplate ini dapat dikurangi menggunakan "importHelpers"
opsi melalui tsconfig. (Lihat posting blog ini tentang iterasi downlevel dan importHelpers
)
Alternatifnya, jika dukungan ES5 tidak penting bagi Anda, Anda selalu dapat menargetkan "es6" sejak awal, dalam hal ini kode asli berfungsi tanpa memerlukan panji "downlevelIteration".
Jawaban asli:
Ini tampaknya merupakan permainan kata-kata transpilasi ES6 yang diketik. The ...
Operator harus bekerja pada apa pun yang memiliki properti iterator, (Diakses oleh obj[Symbol.iterator]
) dan Set memiliki properti itu.
Untuk bekerja di sekitar ini, Anda dapat menggunakan Array.from
untuk mengkonversi set ke array pertama: ...Array.from(new Set([1, 2, 3, 1, 1]))
.