Menu
Coddy logo textTech

Firmas de índice para objetos

Parte de la sección Introducción a TypeScript del Journey de JavaScript de Coddy. Lección 72 de 73.

A veces necesitas trabajar con objetos donde sabes qué tipo de valores contendrán, pero no conoces los nombres de las propiedades específicas de antemano. Esto es común cuando se trabaja con diccionarios, mapas o objetos de configuración donde las claves son dinámicas.

Las firmas de índice te permiten definir la estructura de tipos para tales objetos. La sintaxis utiliza corchetes para especificar el tipo de clave y el tipo de valor:

interface StringDictionary {
  [key: string]: number;
}

Esta interfaz dice "cualquier clave de cadena tendrá un valor numérico". Luego puedes crear objetos que coincidan con este patrón:

let scores: StringDictionary = {
  "alice": 95,
  "bob": 87,
  "charlie": 92
};

Las firmas de índice son particularmente útiles para escenarios como el almacenamiento de preferencias de usuario, el almacenamiento de datos en caché con claves dinámicas o el trabajo con respuestas de API donde los nombres de las propiedades no se conocen en tiempo de compilación. El tipo de clave es típicamente string o number, mientras que el tipo de valor puede ser cualquier tipo válido de TypeScript.

challenge icon

Desafío

Fácil

Crea una interfaz para un sistema de catálogo de productos donde las categorías de productos y sus cantidades en stock se almacenen dinámicamente.

Crea una interfaz llamada ProductCatalog que utilice una signatura de índice para asignar claves de tipo string (nombres de productos) a valores de tipo number (cantidades en stock).

Crea una función llamada getStockLevel que:

  • Acepte dos parámetros: catalog de tipo ProductCatalog y productName de tipo string
  • Devuelva la cantidad en stock del nombre de producto indicado
  • Devuelva 0 si el producto no existe en el catálogo
  • Tenga un tipo de retorno explícito de number

Crea una función llamada updateStock que:

  • Acepte tres parámetros: catalog de tipo ProductCatalog, productName de tipo string y newQuantity de tipo number
  • Actualice la cantidad en stock del producto indicado
  • Devuelva void

Crea una función llamada getTotalStock que:

  • Acepte un parámetro catalog de tipo ProductCatalog
  • Devuelva la suma de todas las cantidades en stock del catálogo
  • Tenga un tipo de retorno explícito de number

Crea datos de prueba:

  • Crea inventory de tipo ProductCatalog con los siguientes productos:
    • "laptop": 15
    • "mouse": 50
    • "keyboard": 25
    • "monitor": 8

Prueba tus funciones e imprime los siguientes resultados:

  • Llama a getStockLevel con inventory y "laptop"
  • Llama a getStockLevel con inventory y "tablet"
  • Llama a getTotalStock con inventory
  • Llama a updateStock con inventory, "mouse" y 75
  • Llama a updateStock con inventory, "webcam" y 12
  • Llama a getStockLevel con inventory y "mouse"
  • Llama a getStockLevel con inventory y "webcam"
  • Llama a getTotalStock con inventory

Pruébalo tú mismo

// TODO: Escribe tu código aquí

// Crea la interfaz ProductCatalog


// Crea la función getStockLevel


// Crea la función updateStock


// Crea la función getTotalStock


// Crea datos de prueba - objeto inventory


// Prueba las funciones e imprime los resultados
console.log(getStockLevel(inventory, "laptop"));
console.log(getStockLevel(inventory, "tablet"));
console.log(getTotalStock(inventory));
updateStock(inventory, "mouse", 75);
updateStock(inventory, "webcam", 12);
console.log(getStockLevel(inventory, "mouse"));
console.log(getStockLevel(inventory, "webcam"));
console.log(getTotalStock(inventory));
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Introducción a TypeScript

Practica por tu cuenta: Compilador de JavaScript online