Как преобразовать набор в массив в TypeScript

Как я могу преобразовать набор (например, {2,4,6}) в массив [2, 4, 6] в TypeScript без явного написания цикла?

Я пробовал следующие способы, все они работают на JavaScript, но ни один из них не работает на TypeScript.

[...set] // ERR: "Type 'Set<{}>' is not an array type" in typescript

Array.from(set) // ERR: Property 'from' does not exist on type 'ArrayConstructor'

person thanhpk    schedule 24.04.2016    source источник
comment
для какой цели вы компилируете? Оба Set и Array.from были добавлены в ES6 и недоступны при компиляции в ES5. Если вы хотите их использовать, вы можете попробовать использовать core.js, чтобы получить для них полифилы.   -  person toskv    schedule 25.04.2016
comment
@toskv Вы правы, это сработало, когда я изменил целевой параметр на «ES6», моя текущая цель - «ES5»   -  person thanhpk    schedule 25.04.2016


Ответы (5)


Исправить

  • Используйте tsconfig.json с "lib": ["es6"]

Более

person basarat    schedule 25.04.2016

Вы также можете сделать

Array.from(my_set.values());
person mayan anger    schedule 15.01.2018
comment
Это должно быть отмечено как правильный ответ - person EuberDeveloper; 26.03.2021

если вы объявите свой набор таким образом:

const mySet = new Set<string>();

вы легко сможете использовать:

let myArray = Array.from( mySet );
person OhadR    schedule 21.07.2020

или просто

const mySet = new Set<string>();
mySet.add(1);
mySet.add(2);
console.log([...mySet.values()]);
person guzmanoj    schedule 19.10.2020

В моем случае ответа @basarat было недостаточно: я не мог использовать оператор распространения, несмотря на то, что в моем массиве lib было esnext.

Чтобы правильно включить использование оператора распространения в наборах и других итерациях ES2015, мне пришлось включить параметр компилятора downlevelIteration.

Вот как установить его через tsconfig.json:

{
  "compilerOptions": {
    "downlevelIteration": true
  }
}

Вы найдете более подробное объяснение этого флага в документации TS. страница о параметрах компилятора.

person Francesco Mastellone    schedule 05.11.2020