EDITAR (5 de junio de 2019): Si bien la idea de que "TypeScript admite de Map
forma nativa" sigue siendo cierta, ya que la versión 2.1 TypeScript admite algo llamado Record
.
type MyMapLikeType = Record<string, IPerson>;
const peopleA: MyMapLikeType = {
"a": { name: "joe" },
"b": { name: "bart" },
};
Desafortunadamente, el primer parámetro genérico (tipo de clave) todavía no se respeta completamente: incluso con un string
tipo, algo como peopleA[0]
(a number
) sigue siendo válido.
EDITAR (25 de abril de 2016): la respuesta a continuación es antigua y no debe considerarse la mejor respuesta. TypeScript ahora es compatible con Maps "nativamente", por lo que simplemente permite que se utilicen Maps ES6 cuando la salida es ES6. Para ES5, no proporciona polyfills; debes incrustarlos tú mismo.
Para obtener más información, consulte la respuesta de mohamed hegazy a continuación para obtener una respuesta más moderna, o incluso este comentario de reddit para una versión corta.
A partir de la versión 1.5.0 beta, TypeScript aún no es compatible con Maps . Tampoco es parte de la hoja de ruta .
La mejor solución actual es un objeto con clave y valor escritos (a veces llamado hashmap). Para un objeto con claves de tipo string
y valores de tipo number
:
var arr : { [key:string]:number; } = {};
Algunas advertencias, sin embargo:
- las teclas solo pueden ser de tipo
string
onumber
- En realidad, no importa lo que use como tipo de clave, ya que los números / cadenas todavía se aceptan indistintamente (solo se aplica el valor).
Con el ejemplo anterior:
// OK:
arr["name"] = 1; // String key is fine
arr[0] = 0; // Number key is fine too
// Not OK:
arr[{ a: "a" }] = 2; // Invalid key
arr[3] = "name"; // Invalid value
values()
yo haríafor (var key in arr) ... arr[key]
ofor...of
. Otra solución (que es más y más realista hoy en día y lo será por un tiempo para muchas cosas) es usar corejs .map Map<string,string>=new Map<string,string>()
cuandomap.set(something)
obtengo una excepciónmap is undefined
, ¿hay otra forma de inicializarla?Ver comentario en: https://github.com/Microsoft/TypeScript/issues/3069#issuecomment-99964139
fuente
Aquí hay un ejemplo:
Manifestación
fuente
TS2304
, por favor verifique esto: stackoverflow.com/questions/39416691/…Sí Map ahora está disponible en mecanografiado ... si mira en lib.es6.d.ts, verá la interfaz:
Es ideal para usar como diccionario de cadenas, pares de objetos ... la única molestia es que si lo está utilizando para asignar valores en otro lugar con Map.get (clave), el IDE como Código le da problemas sobre la posibilidad de ser indefinido ... en lugar de crear una variable con una verificación está definida ... simplemente eche el tipo (suponiendo que sepa con certeza que el mapa tiene el par clave-valor)
fuente
Necesitas apuntar
--module es6
. Esto es lamentable y puede plantear su inquietud aquí: https://github.com/Microsoft/TypeScript/issues/2953#issuecomment-98514111fuente
Como mínimo:
tsconfig:
e instale un polyfill como https://github.com/zloirock/core-js si desea compatibilidad con IE <11: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects /Mapa
fuente
No estoy seguro de si esto es oficial pero funcionó para mí en el mecanografiado 2.7.1:
En simple
Map<keyType, valueType>
fuente
Con la opción de configuración de lib, puede seleccionar el mapa en su proyecto. Solo agrégalo
es2015.collection
a tu sección de lib. Cuando no tenga lib config, agregue uno con los valores predeterminados y agreguees2015.collection
.Entonces, cuando tenga target: es5, cambie tsconfig.json a:
fuente
Typecript aún no es compatible
Map
.Tabla de compatibilidad de ES6
fuente
Agregar
"target": "ESNEXT"
propiedad altsconfig.json
archivo.fuente