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.
Desafío
FácilCrea 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:
catalogde tipoProductCatalogyproductNamede tipostring - Devuelva la cantidad en stock del nombre de producto indicado
- Devuelva
0si 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:
catalogde tipoProductCatalog,productNamede tipostringynewQuantityde tiponumber - Actualice la cantidad en stock del producto indicado
- Devuelva
void
Crea una función llamada getTotalStock que:
- Acepte un parámetro
catalogde tipoProductCatalog - 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
inventoryde tipoProductCatalogcon los siguientes productos:"laptop":15"mouse":50"keyboard":25"monitor":8
Prueba tus funciones e imprime los siguientes resultados:
- Llama a
getStockLevelconinventoryy"laptop" - Llama a
getStockLevelconinventoryy"tablet" - Llama a
getTotalStockconinventory - Llama a
updateStockconinventory,"mouse"y75 - Llama a
updateStockconinventory,"webcam"y12 - Llama a
getStockLevelconinventoryy"mouse" - Llama a
getStockLevelconinventoryy"webcam" - Llama a
getTotalStockconinventory
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));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
1Primeros pasos con TS
¿Qué es TypeScript?¿Por qué usar TypeScript?Tu primer código en TypeScriptProceso de compilación y erroresResumen: Introducción a TS4Trabajando con funciones
Tipado de parámetros y valores de retornoTipado de funciones de flechaEl tipo de retorno 'void'Parámetros opcionales con '?'Valores de parámetros por defectoTipado de parámetros restDefinición de tipos de funcionesRepaso: Construcción de funciones tipadas2Tipos principales
Tipos básicos: str, num, booleanEl tipo 'any': Vía de escapeEl tipo 'unknown'Trabajando con 'null' y 'undef'Inferencia de tipos en acciónAnotaciones de tipo explícitasResumen: Práctica de tipos principales5Tipos: Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de unión ('|')Trabajando con tipos de uniónTipos literalesTipos de intersección ('&')Combinando alias de tiposRepaso: Combinaciones de tipos avanzadas8Enums
¿Qué es un Enum numérico?Uso de Enums numéricos¿Qué es un Enum de string?Uso de Enums de stringEnums heterogéneosResumen: Uso de Enums11Temas avanzados
Aserciones de tipoGuardas de tipo: in & instanceofEl tipo 'never'Tipos anulables ('strictNull')Firmas de índice para objetosResumen: Ajuste de tipos3Estructura de datos: Arrays y Tuplas
Arrays tipadosModificador 'readonly' para Arrays¿Qué es una Tupla?Declaración y acceso a TuplasDesestructuración de TuplasTuplas ReadonlyArrays tipados multidimensionalesOperador Spread con ArraysResumen: Arrays y TuplasPractica por tu cuenta: Compilador de JavaScript online