I'm trying to iterate over a typescript map but I keep getting errors and I could not find any solution yet for such a trivial problem.
My code is:
myMap : Map<string, boolean>;
for(let key of myMap.keys()) {
console.log(key);
}
And I get the Error:
Type 'IterableIteratorShim<[string, boolean]>' is not an array type or a string type.
Full Stack Trace:
Error: Typescript found the following errors: /home/project/tmp/broccoli_type_script_compiler-input_base_path-q4GtzHgb.tmp/0/src/app/project/project-data.service.ts (21, 20): Type 'IterableIteratorShim<[string, boolean]>' is not an array type or a string type. at BroccoliTypeScriptCompiler._doIncrementalBuild (/home/project/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:115:19) at BroccoliTypeScriptCompiler.build (/home/project/node_modules/angular-cli/lib/broccoli/broccoli-typescript.js:43:10) at /home/project/node_modules/broccoli-caching-writer/index.js:152:21 at lib$rsvp$$internal$$tryCatch (/home/project/node_modules/rsvp/dist/rsvp.js:1036:16) at lib$rsvp$$internal$$invokeCallback (/home/project/node_modules/rsvp/dist/rsvp.js:1048:17) at lib$rsvp$$internal$$publish (/home/project/node_modules/rsvp/dist/rsvp.js:1019:11) at lib$rsvp$asap$$flush (/home/project/node_modules/rsvp/dist/rsvp.js:1198:9) at _combinedTickCallback (internal/process/next_tick.js:67:7) at process._tickCallback (internal/process/next_tick.js:98:9)
I'm using angular-cli beta5 and typescript 1.8.10 and my target is es5. Has anyone had this Problem?
I'm using latest TS and node (v2.6 and v8.9 respectively) and I can do:
You could use
Map.prototype.forEach((value, key, map) => void, thisArg?) : void
insteadUse it like this:
If you don't really like nested functions, you can also iterate over the keys:
Note, you have to filter out the non-key iterations with the
hasOwnProperty
, if you don't do this, you get a warning or an error.This worked for me. TypeScript Version: 2.8.3
Just simple explanation to do it from HTML if you have a Map of types (key, array):
I initialize the array this way:
And for iterate over it, I create an array from key values: - just use it as an array with : keys = Array.from(this.cityShop.keys());
Then, in HTML, I can use:
Inside this bucle, I just get the array value with this.cityShop.get(key)
And... done!