EDIT (25 aprile 2016): La risposta che segue è vecchio e non deve essere considerata la migliore risposta. TypeScript ora supporta "nativamente" Maps, quindi consente semplicemente di utilizzare ES6 Maps quando l'output è ES6. Per ES5, non fornisce polyfill; è necessario incorporarli da soli.
Per ulteriori informazioni, fare riferimento a mohamed hegazy's answer below per una risposta più moderna o anche a this reddit comment per una versione breve.
A partire dal 1.5.0 beta, dattiloscritto non supporta ancora Maps. Non fa ancora parte dello roadmap.
La soluzione migliore corrente è un oggetto con chiave e valore digitati (a volte chiamato hashmap). Per un oggetto con chiavi di tipo string
, e valori di tipo number
:
var arr : { [key:string]:number; } = {};
Alcuni avvertimenti, tuttavia:
- chiavi possono essere solo di tipo
string
o number
- In realtà non fa importa quello che usi come tipo di chiave, poiché i numeri/stringhe sono ancora accettati in modo intercambiabile (solo il valore è applicato).
Con l'esempio precedente:
// 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
In che modo quindi si iterano le proprietà nella mappa? Quando faccio arr.values (), ottengo che "Property" values "non esiste sul tipo ..." –
Non lo stesso di 'values ()', farei 'per (var key in arr) .. .arr [chiave] 'o [' per ... di'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of). Altra soluzione (che al giorno d'oggi è sempre più realistica e sarà per un po 'di tempo) è l'uso di [corejs] (https://github.com/Microsoft/TypeScript/issues/3956). – zeh
Infatti quando uso una qualsiasi chiave come proprietà su una mappa dichiarata in questo modo ottengo "Proprietà" qualunque "non esiste sul tipo" – rakslice