How can I convert a Set to an Array in TypeScript

How can I convert a Set (eg, {2,4,6}) to an Array [2, 4, 6] in TypeScript without writing a loop explicitly ?

I have tried those following ways, all of them work in JavaScript but none of them work on TypeScript

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

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

You also can do

Array.from(my_set.values());

Fix

  • Use tsconfig.json with "lib": ["es6"]

More

  • Google lib option.
  • I wrote some docs too : https://basarat.gitbooks.io/typescript/content/docs/types/lib.d.ts.html#lib-option

if you declare your set this way:

const mySet = new Set<string>();

you will be able to easily use:

let myArray = Array.from( mySet );

or simply

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

@basarat's answer wasn't sufficient in my case: I couldn't use the spread operator despite having esnext in my lib array.

To correctly enable using the spread operator on sets and other ES2015 iterables, I had to enable the downlevelIteration compiler option.

Here's how to set it via tsconfig.json:

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

You will find a more detailed explanation of this flag in the TS documentation page about compiler options.