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

189
Vistas
cómo obtener el tipo del valor del objeto
const arr=[{type:'a'},{type:'b'}] type TypeFromVal<T>=T extends {type:infer R}[]?R:any function GetType<T extends {type:string}[]>(arr:T,type:TypeFromVal<T>){ return arr.find(item=>item.type===type).type } GetType(arr,0)

la inferencia automática es una cadena o un número, quiero obtener el tipo que es 'a' | 0 quiero que Typescript conozca el tipo de parámetro de la función que se infiere de arr. En otras palabras, ¿cómo obtener el tipo de inferir?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

const arr = [{type: 'a'}, {type: 'b'}]; type TypeFromVal = { type: string | number } function GetType(arr: Array<TypeFromVal>, type: number | string) { return arr.find(item => item.type === type)?.type } console.log(GetType(arr, 0));
about 4 years ago · Juan Pablo Isaza Denunciar

0

Para inferir todos los tipos, debe usar as const para arr o pasarlo como un tipo literal para que funcione en lugar de pasar la referencia.

 type FindIndex< T extends Array<{ type: string }>, ExpectedType extends T[number]['type'], > = { [Prop in keyof T]: (T[Prop] extends { type: infer Type } ? (Type extends ExpectedType ? Prop : never ) : never ) }[number]; { // 0 type Test = FindIndex<[{ type: 'a' }, { type: 'b' }], 'a'> } function GetType< Type extends string, Elem extends { type: Type }, Arr extends Elem[], ExpectedType extends Arr[number]['type'], >(arr: [...Arr], type: ExpectedType): FindIndex<Arr, ExpectedType> function GetType< Arr extends { type: string }[], ExpectedType extends Arr[number]['type'], >(arr: [...Arr], type: ExpectedType) { return arr.find((item) => item.type === type) } const result = GetType([{ type: 'a' }, { type: 'b' }], 'a') // 0

Explicación

FindIndex : itera a través de una tupla/matriz inferida literalmente y comprueba si la propiedad de type amplía ExpectedType . En caso afirmativo, devuelva Prop , en nuestro caso, se trata de un índice. De lo contrario, never . Entonces, sin [number] al final, terminará con [0, never] . Indexarlo por [number] devuelve 0 | never , que es básicamente igual a 0 .

He sobrecargado GetType para aplicar FindIndex .

Además, como habrás notado, para inferir el tipo literal, debes inferir cada accesorio del elemento. Debes ir de abajo hacia arriba.

El primer Type genérico infiere la propiedad de type . Luego, Elem infiere cada elemento de la matriz. Y finalmente Arr , gracias a los tipos de tuplas variádicas, se infiere completamente.

Puede encontrar más información sobre las manipulaciones de tuplas en mi blog aquí y sobre la inferencia de tipos aquí

about 4 years ago · Juan Pablo Isaza Denunciar
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