Tengo un problema extraño. Tengo la siguiente función en js:
const removeDuplicates = (inputData) => { return [ ...new Map(inputData.map((data) => [JSON.stringify([data.x, data.y, data.v]), data])).values() ]; };Y lo estoy probando así en una prueba mecanografiada de broma:
it('removeDuplicates', () => { const expectedObject = [ { x: 'G', y: 'B', v: '12345' }, { x: 'A', y: 'L', v: '12345' }, { x: 'A', y: 'W', v: '123' }, { x: 'A', y: 'W', v: '1234' } ]; const inputData = [ { x: 'G', y: 'B', v: '12345' }, { x: 'A', y: 'L', v: '12345' }, { x: 'A', y: 'L', v: '12345' }, { x: 'A', y: 'W', v: '123' }, { x: 'A', y: 'W', v: '1234' }, { x: 'A', y: 'W', v: '1234' } ]; expect(removeDuplicates(inputData)).toEqual(expectedObject); });Cuando la prueba está en un archivo js, pasa, cuando convierto el archivo de prueba en un archivo ts, falla y la función no devuelve nada. ¿Algunas ideas?
Parece que al compilador no le gusta sin la opción del compilador ''--downlevelIteration'. ¿Configuraste esto?
Type 'IterableIterator<unknown>' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators.ts(2569) Podrías usar Array.from en su lugar:
type MyThing = { x: string; y: string; v: string }; const removeDuplicates = (inputData: MyThing[]): MyThing[] => Array.from( new Map( inputData.map((data) => [JSON.stringify([data.x, data.y, data.v]), data]) ).values() );También debe considerar el uso de una biblioteca externa para tareas tan triviales. Por ejemplo, la función uniq de Ramda debería hacer exactamente lo mismo.