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

288
Views
Quiero permitir, como @Input de un componente, solo claves que tengan valores de cadena

Tengo un componente genérico que acepta una matriz de objetos de tipo T y una cadena que es una clave de T. El propósito de este componente es filtrar la matriz de objetos en función de un carácter del alfabeto, pero para hacerlo necesito el clave de entrada dada para tener un valor de cadena. Aquí hay un código de muestra:

 @Input() data: T[]; @Input() key: keyof T; function filterByChar(char: string) { return this.data.filter(el => el[this.key] === char); }

Esto no funciona porque el[this.key] podría no ser una cadena.

¿Es posible restringir la key para que sea una clave del objeto T que solo tenga valores de cadena?

Aquí hay un enlace al ejemplo de stackblitz

EDITAR: la @Input() key tiene una restricción, solo se permiten las teclas de T. Quiero permitir solo claves de T que tengan valores de cadena (en tiempo de compilación si es posible).

EDIT 2 : supongamos que el tipo real de T es algo como esto:

 interface Person { id: number; name: string; email: string; address: Address; }

Cuando llamas a mi componente

<app-filter-by [data]="someData" [key]="XXXX"></app-filter-by>

Quiero hacer cumplir que solo se permiten claves de T de tipo cadena. En este ejemplo, solo se deben permitir el nombre y el correo electrónico .

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

prueba algunos de estos:

 return this.data.filter(el => (el as any)[this.key] === char); return this.data.filter(el => (($any)el)[this.key] === char); return this.data.filter(el => ( el[this.key] as unknown as keyof T === char ));
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!