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.

No se puede acceder a los valores del objeto utilizando claves en Typescript (TS).

Tengo un objeto simple así:

export const daysOfTheWeek = {
  0: "Domingo",
  1: "Lunes",
  2: "Martes",
  3: "Miércoles",
  4: "Jueves",
  5: "Viernes",
  6: "Sábado",
};

Estoy tratando de acceder a él utilizando una variable así:

const checkDay = (dayIndex: number): void => {
  console.log(daysOfTheWeek[dayIndex]) // el error ocurre aquí
};

Espero obtener “Domingo” registrado, sin embargo, aparece este error:

Elemento implícitamente tiene un tipo 'any' porque la expresión de tipo 'number' no se puede usar para indizar el tipo '{ 0: string; 1: string; 2: string; 3: string; 4: string; 5: string; 6: string; }'.
No se encontró ninguna firma de índice con un parámetro de tipo 'number' en el tipo '{ 0: string; 1: string; 2: string; 3: string; 4: string; 5: string; 6: string; }'.ts(7053)

¿Algún consejo sobre cómo solucionar esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error está ocurriendo porque TypeScript te está protegiendo de intentar acceder a una propiedad que no existe en el objeto. En este caso, estás intentando acceder a una propiedad con un índice numérico, pero el objeto no tiene una firma de índice para soportar eso.

    Para solucionar este problema, puedes hacer lo siguiente:

    1. Utiliza una aserción de tipo para indicarle a TypeScript que sabes lo que estás haciendo y que el objeto tiene una firma de índice numérico:
      console.log((daysOfTheWeek as {[key: number]: string})[dayIndex]);
      
    2. Cambia el objeto para utilizar una firma de índice de cadena en lugar de una numérica:
      export const daysOfTheWeek = {
        '0': "Domingo",
        '1': "Lunes",
        '2': "Martes",
        '3': "Miércoles",
        '4': "Jueves",
        '5': "Viernes",
        '6': "Sábado",
      };
      

    Cualquiera de estos enfoques debe permitirte acceder al objeto utilizando un índice numérico sin que TypeScript se queje.

Comments are closed.