ES6 Carte à la Machine
Je suis la création d'une classe à la machine qui a une propriété qui est une ES6 (ECMAscript 2016) de la Carte comme suit:
class Item {
configs: ????;
constructor () {
this.configs = new Map();
}
}
Comment dois-je déclarer un ES6 type de Carte à la machine?
Vous devez vous connecter pour publier un commentaire.
MODIFIER (5 Juin 2019): bien que l'idée que "la Machine prend en charge
Map
nativement" est toujours vrai, depuis la version 2.1 Tapuscrit prend en charge quelque chose appeléRecord
.Malheureusement, le premier paramètre générique (type de clé) n'est pas encore pleinement respectés: même avec un
string
type, quelque chose commepeopleA[0]
(unnumber
) est toujours valide.MODIFIER (Apr 25 2016): La réponse ci-dessous est vieux et ne doit pas être considérée comme la meilleure réponse. La machine prend en charge les Cartes "nativement" maintenant, il permet simplement à ES6 Cartes pour être utilisé lorsque la sortie est à l'ES6. Pour ES5, il ne fournit pas de polyfills; vous avez besoin d'intégrer vous-même.
Pour plus d'informations, reportez-vous à mohamed hegazy la réponse ci-dessous pour une réponse moderne, ou même cette reddit commentaire pour la version courte.
Comme 1.5.0 bêta, la Machine ne prend pas encore en charge Cartes. Il ne fait pas encore partie de la feuille de route, soit.
La meilleure solution actuelle est un objet avec des tapé la clé et la valeur (parfois appelé une table de hachage). Pour un objet avec les touches de type
string
, et les valeurs de typenumber
:Quelques mises en garde, cependant:
string
ounumber
Avec l'exemple ci-dessus:
values()
, je feraisfor (var key in arr) ... arr[key]
oufor...of
. Autre solution (qui est de plus en plus réaliste de nos jours et sera pendant un certain temps pour beaucoup de choses), c'est d'utiliser corejs.map Map<string,string>=new Map<string,string>()
quand je faismap.set(something)
j'obtiens une exceptionmap is undefined
, est-il une autre façon d'initialiser?Voir le commentaire dans: https://github.com/Microsoft/TypeScript/issues/3069#issuecomment-99964139
Voici un exemple:
Démo
error TS2304: Cannot find name 'Map'.
TS2304
, veuillez vérifier ceci : stackoverflow.com/questions/39416691/...Oui la Carte est maintenant disponible en caractères d'imprimerie.. si vous regardez dans lib.es6.d.ts, vous verrez l'interface:
Son grand pour l'utiliser comme un dictionnaire de la chaîne,des paires d'objets.. le seul ennui, c'est que si vous l'utilisez pour affecter des valeurs ailleurs avec Carte.get(clé) l'IDE comme Code vous donne des problèmes à propos d'être possible undefined.. plutôt que de créer une variable est définie par chèque .. tout simplement jeté le type (en supposant que vous savez pour sûr que la carte a la paire clé-valeur)
Vous devez cibler
--module es6
. C'est malheur, et vous pouvez faire part de vos préoccupations ici : https://github.com/Microsoft/TypeScript/issues/2953#issuecomment-98514111Minimum:
tsconfig:
et installer un polyfill comme https://github.com/zloirock/core-js si vous voulez IE < 11: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
La machine ne prend pas encore en charge
Map
.ES6 Tableau de Compatibilité
Avec le lib option de configuration vous êtes en mesure d'écrémer la Carte dans votre projet. Juste ajouter
es2015.collection
à votre lib section. Lorsque vous n'avez pas de lib config add-on avec les valeurs par défaut et ajouteres2015.collection
.Ainsi, lorsque vous avez de la cible: es5, changement tsconfig.json à:
Ne sais pas si c'est officiel mais cela a fonctionné pour moi en caractères d'imprimerie 2.7.1:
En simple
Map<keyType, valueType>
Ajouter
"target": "ESNEXT"
propriété de latsconfig.json
fichier.