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.