declare class Array { @@iterator(): Iterator; map(callbackfn: (value: T, index: number, array: Array) => U, thisArg?: any): Array; } type IteratorResult = | { done: true, value?: Return } | { done: false, value: Yield }; interface $Iterator<+Yield,+Return,-Next> { @@iterator(): $Iterator; next(value?: Next): IteratorResult; } type Iterator<+T> = $Iterator; interface $Iterable<+Yield,+Return,-Next> { @@iterator(): $Iterator; } type Iterable<+T> = $Iterable; declare class Map { @@iterator(): Iterator<[K, V]>; constructor(iterable: ?Iterable<[K, V]>): void; set(key: K, value: V): Map; }