Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

194
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!