Оновлення : за допомогою Typescript 2.3 тепер ви можете додавати "downlevelIteration": true
до вашого tsconfig, і це буде працювати під час націлювання на ES5.
Недоліком downlevelIteration
є те, що під час транспортування ТС доведеться впорхнути досить багато зразків. Один рядок із запитання транслюється з 21 рядком доданої шаблонної таблиці: (станом на Typescript 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);
Цей шаблонний шаблон буде введений один раз у файл, який використовує ітерацію нижчого рівня, і цей шаблонний "importHelpers"
шаблон можна зменшити, використовуючи опцію через tsconfig. (Див. Цей допис у блозі про ітерацію нижчого рівня та importHelpers
)
Як варіант, якщо підтримка ES5 для вас не має значення, ви завжди можете просто націлити на "es6", в цьому випадку оригінальний код працює, не потребуючи прапора "downlevelIteration".
Оригінальна відповідь:
Це, здається, химерність транпіляції ES6. ...
Оператор повинен працювати на все , що має властивість ітератора, (до яких звертається obj[Symbol.iterator]
) і набори мають цю властивість.
Щоб обійти цю проблему , ви можете використовувати , Array.from
щоб перетворити набір в масив першим: ...Array.from(new Set([1, 2, 3, 1, 1]))
.