Búsqueda de sitios web

¿Cómo defino un diccionario de número a cadena en Typescript?


Estoy jugando con TypeScript y convirtiendo una pequeña biblioteca de Javascript a él. En una parte del código había un mapeo definido estáticamente de nombre de tecla amigable a su código de tecla. El código original se veía así:

keys: { "Backspace": 8, "Tab": 9, "Enter": 13, ....etc.. };

Definí esto en TypeScript mediante:

static keys: { [name: string]: number; } = { "Backspace": 8, "Tab": 9, "Enter": 13, ... etc.. };

Esto parece funcionar bien, sin embargo otra parte del código utiliza el mapeo opuesto:

    chars: {8:"Backspace",9:"Tab",13:"Enter", ...etc... };

Así que intenté hacer el mismo tipo de definición en TypeScript que hice anteriormente:

chars: { [code: number]: string; } = { 8: "Backspace", 9: "Tab", 13: "Enter", ...etc.. };

Esto no compila con el siguiente error:

No se puede convertir '{ 0: string; 1: string; 2: string; 4: string; 8: string; 9: string; : string; }' a '{ [name: number]: string; }': Las firmas de índice de los tipos '{ 0: string; 1: string; 2: string; 4: string; 8: string; 9: string; : string; }' y '{ [name: number]: string; }' son incompatibles

¿Cómo defino este mapeo en Typescript?

Respuesta #1

El problema es que en JavaScript - y por lo tanto en TypeScript - las claves de un literal de objeto siempre son cadenas, y por lo tanto no se puede asignar a una variable con un indexador numérico.

Un objeto con un indexador numérico es un arreglo, por lo que tienes que hacer esto:

var chars: string[] = [];
chars[8]= "Backspace";
chars[9]= "Tab";
chars[13] = "Enter";

Artículos relacionados