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

113
Vistas
T extiende String como índice de tipo mapeado

En mi proyecto, estoy usando un tipo asignado (con string como claves):

 export type ConfigurableFieldsType<T extends string[]> = { [field in keyof T]: string }

En el siguiente método, estoy usando el tipo ( this.configurableFields es un objeto ConfigurableFieldsType ):

 private getConfigurableAttribute(attribute: C[number]): string { return this.configurableFields[attribute] }

Sin embargo, estoy recibiendo el error:

 Type 'C[number]' cannot be used to index type 'ConfigurableFieldsType<C>'.

Puede encontrar el ejemplo completo (con error reproducible) en este TS Playground o en el siguiente:

 export type ProductType<T extends string[]> = { // more variables configurableFields: ConfigurableFieldsType<T> } export type ConfigurableFieldsType<T extends string[]> = { [field in keyof T]: string } export class Product<C extends string[]> implements ProductType<C> { constructor( // more public parameters public configurableFields: ConfigurableFieldsType<C>, ) {} private getConfigurableAttribute(attribute: C[number]): string { return this.configurableFields[attribute] } }
about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Tiene la intención de que ConfigurableFieldsType<["a", "b", c"]> evalúe algo como {a: string, b: string, c: string} , pero su definición actual daría como resultado [string, string, string] Esto se debe a que {[K in keyof T]: string} da como resultado un tipo de matriz asignada , T es un tipo similar a una matriz, y keyof T es, por lo tanto, las claves de la matriz, como "push" o "length" .

En su lugar, desea que las claves de su tipo sean elementos de T . Es decir, los tipos que obtienes cuando indexas en T con un índice numérico... así que en lugar de keyof T , quieres T[number] :

 export type ConfigurableFieldsType<T extends string[]> = { [K in T[number]]: string } type Example = ConfigurableFieldsType<["a", "b", "c"]> /* type Example = { a: string; b: string; c: string; } */

Y ahora las cosas funcionan como pretendes:

 private getConfigurableAttribute(attribute: C[number]): string { return this.configurableFields[attribute] // okay }

Enlace del patio de recreo al código

about 4 years ago · Santiago Gelvez 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