Eu tenho algum código JavaScript que usa objetos como dicionários; por exemplo, um objeto 'pessoa' conterá alguns detalhes pessoais digitados no endereço de email.
var people = {<email> : <'some personal data'>};
adding > "people[<email>] = <data>;"
getting > "var data = people[<email>];"
deleting > "delete people[<email>];"
É possível descrever isso no texto datilografado? ou eu tenho que usar uma matriz?
arrays
object
dictionary
typescript
Robert Taylor
fonte
fonte
Respostas:
Nas versões mais recentes do texto datilografado, você pode usar:
Nas versões mais antigas, você pode usar:
Você também pode criar uma interface se não quiser digitar toda a anotação de tipo sempre:
fonte
map
contém dois membros: (<qualquer> Object.prototype) .something = function () {}; classe Customer {} var map: {[email: string]: Customer; } = {}; map ['[email protected] '] = novo cliente (); para {console.log (mapa [i])} (var i no mapa)var map:MapStringTo<Customer> = {};
Além de usar um objeto parecido com um mapa , há um
Map
objeto real há algum tempo, disponível no TypeScript ao compilar no ES6 ou ao usar um polyfill com as definições de tipo do ES6 :Ele suporta a mesma funcionalidade
Object
e mais com uma sintaxe ligeiramente diferente:Isso por si só tem várias vantagens sobre o uso de um objeto parecido com um mapa , como:
Object
(não,Object
não suporta números, ele os converte em strings)--noImplicitAny
, poisMap
sempre possui um tipo de chave e um valor , enquanto um objeto pode não ter uma assinatura de índiceObject
Além disso, um
Map
objeto fornece uma API mais poderosa e elegante para tarefas comuns, a maioria das quais não está disponível através deObject
s simples sem hackear as funções auxiliares (embora algumas delas exijam um iterador ES6 / polyfill iterável para destinos ES5 ou abaixo):fonte
JSON.stringify()
, por isso pode ser por exemplo utilizado para socket.io :(Map
serialização é bastante engraçada. Eu, por exemplo, realizo uma conversão em objetos de par de valores-chave antes de serializar e depois volto (por exemplo, objeto de{ key: "John", value: { firstName: "John" } }
).Você pode usar interfaces modeladas como esta:
fonte
let dict: Dictionary<number> = { "one": 1, "two": 2 };
Você também pode usar o tipo de registro em texto datilografado:
fonte
O Lodash possui uma implementação simples do Dicionário e um bom suporte ao TypeScript
Instale o Lodash:
Importação e uso:
fonte
Você pode usar
Record
para isso:https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkt
Exemplo (Um mapeamento entre a enumeração AppointmentStatus e alguns metadados):
Agora com a interface como valor:
interface Icon { Name: string Color: string }
Uso:
const icon: SemanticIcon = iconMapping[appointment.Status]
fonte
enum
ou umclass/object
forAppointmentStatus
- ou isso importa?Há uma biblioteca que fornece coleções consultáveis e fortemente tipadas em texto datilografado.
As coleções são:
A biblioteca é chamada ts-generic-collections . ( Código fonte no GitHub )
Você pode criar um dicionário e consultá-lo como abaixo:
fonte