es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Typescript: registro de tipo de clave (KeyType) -> tipos de valor

Necesito crear un registro de Typescript con las claves definidas en un tipo independiente y tipos específicos para cada valor.

Las claves se definen de la siguiente manera:

// Las claves deben estar disponibles/iterables en tiempo de ejecución
const keys = [‘a’, ‘b’, ‘c’] como const
export type Key = typeof keys[number]

Ahora veo dos opciones, ambas con fallas.

Opción 1: repetir las claves y definir los tipos de valor de manera explícita, según sea necesario. Flaw:

export type Structure1 = {
a: number
b: boolean
c: string
}

Opción 2: definir un registro a partir de Key y perder la información de tipo específico de los valores:

export type Structure2 = Record<key, number=”” |=”” boolean=”” |=”” string=””>

¿Existe una tercera opción para una Structure3 que utilice Key como tipo de clave y un tipo de valor explícito por clave?</key,>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, existe una tercera opción para crear una Structure3 que utilice Key como tipo de clave y un tipo de valor explícito por clave. Puede usar un tipo mapeado para recorrer cada clave en el tipo Key y asignar un tipo de valor específico a ella.

    Aquí tienes un ejemplo:

    type Structure3 = {
      [K in Key]: K extends 'a' ? number : K extends 'b' ? boolean : K extends 'c' ? string : never
    }
    

    Esto crea un tipo mapeado que recorre cada clave en Key y asigna un tipo de valor específico según la clave. En este ejemplo, a tiene un tipo de valor de number, b tiene un tipo de valor de boolean, y c tiene un tipo de valor de string.

    Utilizando este enfoque, puedes mantener los tipos de valor específicos para cada clave mientras se utiliza Key como tipo de clave.

Comments are closed.