I want to extract all the unique properties from an array of objects, you can do so in ES6 very cleanly using the spread operator and the Set so:
var arr = [ {foo:1, bar:2}, {foo:2, bar:3}, {foo:3, bar:3} ]
const uniqueBars = [... new Set(arr.map(obj => obj.bar))];
>> [2, 3]
However, in TypeScript 1.8.31 this gives me the build error:
Cannot find name 'Set'
I know I can force VS to ignore it by using
declare var Set;
But I'm hoping for something TypeScript will compile into non-ES6 so that it could be used on older systems.
Does anyone know if there's such a feature I could use?
Edit:
Actually, even when I use declare var Set;
, the above code compiles but throws this error repeatedly, so I'm not sure how to use it even without compiling down:
Uncaught TypeError: (intermediate value).slice is not a function
How can I update my code to use Set
in TypeScript?
I want to extract all the unique properties from an array of objects, you can do so in ES6 very cleanly using the spread operator and the Set so:
var arr = [ {foo:1, bar:2}, {foo:2, bar:3}, {foo:3, bar:3} ]
const uniqueBars = [... new Set(arr.map(obj => obj.bar))];
>> [2, 3]
However, in TypeScript 1.8.31 this gives me the build error:
Cannot find name 'Set'
I know I can force VS to ignore it by using
declare var Set;
But I'm hoping for something TypeScript will compile into non-ES6 so that it could be used on older systems.
Does anyone know if there's such a feature I could use?
Edit:
Actually, even when I use declare var Set;
, the above code compiles but throws this error repeatedly, so I'm not sure how to use it even without compiling down:
Uncaught TypeError: (intermediate value).slice is not a function
How can I update my code to use Set
in TypeScript?
3 Answers
Reset to default 8This worked for me.
One of the issues appears to be that typescript trys to use
ERROR TypeError: (intermediate value).slice is not a function
instead of Array.from();
in any event this code worked for me in my Angular 4 applicaiton
Array.from(new Set(Array)).sort(this.compareNumbers)
hope this helps someone
No. If you compile to ES5 or older Typescript only adds the syntactic changes from ES6. It doesn't add any of the standard library objects.
If you want those I suggest you look into something like core.js
You can use this type script library. Or maybe create your one set class using reference from this library
Set
is polyfillable JS feature. This is a duplicate, stackoverflow.com/a/41608156/3731501 in particular. – Estus Flask Commented Jan 21, 2017 at 20:01