Reputation: 4287
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'
Upvotes: 138
Views: 131141
Reputation: 496
Another solution is using the !
post-fix expression operator to assert that its operand is non-null and non-undefined.
You'll find further information in Non-null assertion operator
You can use the spread operator to convert a Set into an Array:
const mySet = new Set(['h','j','l','l']);
console.log([...mySet!])
Upvotes: 0
Reputation: 81
@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.
Upvotes: 4
Reputation: 3587
or simply
const mySet = new Set<string>();
mySet.add(1);
mySet.add(2);
console.log([...mySet.values()]);
Upvotes: 7
Reputation: 8839
if you declare your set this way:
const mySet = new Set<string>();
you will be able to easily use:
let myArray = Array.from( mySet );
Upvotes: 46
Reputation: 276161
"lib": ["es6"]
lib
option. Upvotes: 25