Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

92
Vistas
Función de aserción mecanografiada para manipular objetos.

Quiero manipular un objeto con una función que analice todas las claves dadas a un número. Además, la función debe crear el tipo correcto para el objeto.

Esto es lo que tengo hasta ahora:

 type ReplaceStringWithNumber<T> = T extends string ? number : T type ReplaceStringsWithNumbers<T extends Record<PropertyKey, unknown>, K extends keyof T> = { [P in keyof T]: P extends K ? ReplaceStringWithNumber<T[P]> : T[P] } export function parseIntIfSet<T extends Record<string, unknown>, K extends keyof T>( object: T | ReplaceStringsWithNumbers<T, K>, key: K ): asserts object is ReplaceStringsWithNumbers<T, K> { if (object[key]) { object[key] = Number(object[key]) as T[K] } }

Se ve bien por ahora, pero cuando pruebo la función:

 const p = {id: '1'} parseIntIfSet(p, 'id') // `p.id` is of type `never`, because `p` is of type `{id: string} & {id: number}`

Alguien sabe cómo resolver esto? Una solución que funciona es devolver un nuevo objeto con el tipo manipulado, pero esto no es exactamente lo que quiero.

Tampoco estoy seguro de por qué necesito usar T | ReplaceStringsWithNumbers<T, K> en los parámetros, ya que recibo un error si solo uso T .

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda