2016-11-25 2 views
4

Tapuscrit me donne cette erreur lorsque je tente de itérer sur la valeur retournée par Map.values() (où la carte est de type < nombre, Foo >):erreur Tapuscrit: Map.values ​​() donnant IterableIterator pas Iterable

error TS2495: Type 'IterableIterator<Foo>' is not an array type or a string type.

Selon le ES6 docMap.values() devrait retourner un Iterable pas un IterableIterator et je devrais être capable de l'utiliser dans une boucle for-of.

Cela fonctionne très bien dans node:

var data = [ 
    {id: 0}, 
    {id: 1}, 
    {id: 3} 
]; 
var m = new Map(data.map(n => [n.id,n])); 
for(var i of m.values()) { console.log(i) } 

Cela donne l'erreur de tsc:

interface Foo { 
    id: number; 
} 
var data: Foo[] = [ 
    {id: 0}, 
    {id: 1}, 
    {id: 2} 
]; 
var m = new Map<number,Foo>(data.map(n => <[number,Foo]>[n.id,n])); 
for(var i of m.values()) { console.log(i) } 

Je reçois des déclarations de carte de @types/[email protected] donc je suppose que la question est dans cette déclaration ??

Autre version & info conf:

> tsc --version 
Version 2.0.3 
> cat tsconfig.json 
{ 
    "compilerOptions": { 
    "target": "es6", 
    "module": "commonjs", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": false, 
    "noImplicitAny": true, 
    "suppressImplicitAnyIndexErrors": true, 
    "typeRoots": [ 
     "./node_modules/@types/" 
    ] 
    }, 
    "compileOnSave": true, 
    "exclude": [ 
    "node_modules/*", 
    "**/*-aot.ts" 
    ] 
} 

Répondre

0

Je ne comprenais pas certaines des choses implicites tsc fait rel le tsconfig.json. La lecture tsconfig.json doc choses plus clairement:

d'abord, je transpiling comme ce qui tsc mytypescript.ts (bêtement) provoque Tapuscrit ignorer silencieusement tsconfig.json fichier, ce qui signifie qu'il utilisait la valeur par défaut ES5. Mais cela fonctionnait partiellement parce que tsc trouvait encore les déclarations core-js qui contenaient des déclarations pour des choses ES6 comme Map, Iterable etc. Cela a jeté un peu de temps à mon débogage. Deuxièmement, après avoir obtenu Typescript pour récupérer réellement ma config, la configuration était mal quand même. Je n'ai pas vraiment besoin ou je veux ces déclarations de @types/core-js (assez sûr). Oui, je vais utiliser core-js comme un polyfill dans mon projet, mais les déclarations de typescript comes with it's own pour les choses ES6 en typescript/lib/lib.es6.d.ts, et ceux en @types/core-js sont vieux bizarre et merdique ou quelque chose ...