thanhpk
thanhpk

Reputation: 4287

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'

Upvotes: 138

Views: 131141

Answers (6)

Hugo Ramirez
Hugo Ramirez

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

Francesco Mastellone
Francesco Mastellone

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

WSD
WSD

Reputation: 3587

or simply

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

Upvotes: 7

OhadR
OhadR

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

mayan anger
mayan anger

Reputation: 2692

You also can do

Array.from(my_set.values());

Upvotes: 236

basarat
basarat

Reputation: 276161

Fix

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

More

Upvotes: 25

Related Questions