Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

259
Visualizações
TypeScript creando Set/Array a partir de una matriz de números o cadenas

Estoy tratando de crear una función, que tome una matriz de números o una matriz de cadenas y devuelva Set de esa matriz, así:

 const f = (arr: number[] | string[]): number[] | string[] => { return [...new Set(arr)]; }

Y obteniendo un error:

Ninguna sobrecarga coincide con esta llamada.
Sobrecarga 1 de 2, '(¿iterable?: Iterable | nulo | indefinido): Conjunto', dio el siguiente error. Argumento de tipo 'número[] | string[]' no es asignable al parámetro de tipo 'Iterable | nulo | indefinido'. El tipo 'string[]' no se puede asignar al tipo 'Iterable'. Los tipos devueltos por 'Symbol.iterator.next(...)' son incompatibles entre estos tipos. El tipo 'IteratorResult<string, any>' no se puede asignar al tipo 'IteratorResult<number, any>'. El tipo 'IteratorYieldResult' no se puede asignar al tipo 'IteratorResult<number, any>'. El tipo 'IteratorYieldResult' no se puede asignar al tipo 'IteratorYieldResult'. El tipo 'cadena' no se puede asignar al tipo 'número'.
Sobrecarga 2 de 2, '(¿valores?: número de solo lectura[] | nulo | indefinido): Conjunto', dio el siguiente error. Argumento de tipo 'número[] | string[]' no se puede asignar al parámetro de tipo 'readonly number[] | nulo | indefinido'. El tipo 'cadena []' no se puede asignar al tipo 'número de solo lectura []'. El tipo 'cadena' no se puede asignar al tipo 'número'.

Puedo cambiar el tipo entrante de number[] | string[] a (number | string)[] pero significa que en la matriz podría haber números y cadenas al mismo tiempo, eso no es lo que quiero .

 const f = (arr: (number | string)[]): (number | string)[] => { return [...new Set(arr)]; } f([1,2,3]); // ok f(['1','2','3']); // ok f([1,2,'3','4']); // ok, but should be err f([true, {}, 1]); // err, like it should be
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

EDITAR: parece que esto se relaciona con algunas configuraciones de TS. Una forma es distribuir la matriz a partir de la cual está creando el conjunto y emitir el valor de retorno, así:

 const f = (arr: number[] | string[]): number[] | string[] => { return Array.from(new Set([...arr])) as number[] | string[]; }

Como dice udalmik, puedes usar any cosa que anule el punto.

over 4 years ago · Santiago Trujillo Relatório

0

Puedes deshacerte de este error lanzando un argumento a any[] :

 function f(arg: number[] | string[]): number[] | string[] { return [...new Set(arg as any[])]; }
over 4 years ago · Santiago Trujillo Relatório

0

Creo que cualquiera de estos podría funcionar mejor.

 const f = <T extends number[] | string[]>(arr: T): T => { return <T> [...new Set(arr as any[])]; } let f1 = f([1,2,3,4,5,5,5]); let f2 = f(['a','b','c','c','c']); let f3 = f(['a','b','c','a','b',1,2,3,4]);//error
 function f(arr:number[]):number[]; function f(arr:string[]):string[]; function f(arr:any[]):any[]{ return [...new Set(arr)]; } let f1 = f([1,2,3,4,5,5,5]); let f2 = f(['a','b','c','c','c']); let f3 = f(['a','b','c','a','b',1,2,3,4]);//error

De esta forma, la función solo acepta matrices de números o cadenas, pero no ambas, y conserva la información del tipo de retorno. Si pasa una matriz de números, TypeScript sabe que el valor devuelto es una matriz de números.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda