Tengo un código JavaScript que usa objetos como diccionarios; por ejemplo, un objeto 'persona' contendrá algunos datos personales extraídos de la dirección de correo electrónico.
var people = {<email> : <'some personal data'>};
adding > "people[<email>] = <data>;"
getting > "var data = people[<email>];"
deleting > "delete people[<email>];"
¿Es posible describir esto en Typecript? o tengo que usar una matriz?
arrays
object
dictionary
typescript
Robert Taylor
fuente
fuente
Respuestas:
En las versiones más nuevas de mecanografiado puede usar:
En versiones anteriores puedes usar:
También puede crear una interfaz si no desea escribir esa anotación de tipo completo cada vez:
fuente
map
contiene dos miembros: (<any> Object.prototype) .something = function () {}; clase Cliente {} var mapa: {[correo electrónico: cadena]: Cliente; } = {}; map ['[email protected] '] = nuevo Cliente (); for (var i in map) {console.log (map [i])}var map:MapStringTo<Customer> = {};
Además de usar un objeto similar a un mapa , ha habido un
Map
objeto real desde hace algún tiempo, que está disponible en TypeScript cuando se compila en ES6, o cuando se usa un polyfill con las definiciones de tipo ES6 :Admite la misma funcionalidad que
Object
, y más, con una sintaxis ligeramente diferente:Esto solo tiene varias ventajas sobre el uso de un objeto similar a un mapa , como:
Object
(no,Object
no admite números, los convierte en cadenas)--noImplicitAny
, ya queMap
siempre tiene un tipo de clave y un tipo de valor , mientras que un objeto puede no tener una firma de índiceObject
Además, un
Map
objeto proporciona una API más potente y elegante para tareas comunes, la mayoría de las cuales no están disponibles a través deObject
correos electrónicos simples sin hackear las funciones de ayuda (aunque algunas de estas requieren un iterador ES6 completo / polyfill iterable para objetivos ES5 o inferiores):fuente
JSON.stringify()
, por lo que se puede usar, por ejemplo, para socket.io :(Map
serialización es bastante divertida. Yo, por ejemplo, realizo una conversión a objetos de pares clave-valor antes de serializar, y luego de regreso (por ejemplo, objeto de{ key: "John", value: { firstName: "John" } }
).Puede usar interfaces con plantillas como esta:
fuente
let dict: Dictionary<number> = { "one": 1, "two": 2 };
También puede usar el tipo de registro en mecanografiado:
fuente
Lodash tiene una implementación de diccionario simple y tiene un buen soporte de TypeScript
Instalar Lodash:
Importación y uso:
fuente
Puedes usar
Record
para esto:https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkt
Ejemplo (un mapeo entre la cita ApNameStatus y algunos metadatos):
Ahora con interfaz como valor:
interface Icon { Name: string Color: string }
Uso:
const icon: SemanticIcon = iconMapping[appointment.Status]
fuente
enum
o unclass/object
forAppointmentStatus
, o importa?Hay una biblioteca que proporciona colecciones fuertemente tipadas y consultables en mecanografiado.
Las colecciones son:
La biblioteca se llama ts-generic-collections . ( Código fuente en GitHub )
Puede crear un diccionario y consultarlo como a continuación:
fuente