export type Property = string | number | symbol
export type IteratableValueCore<Key extends Property = Property, Value = any> =
| Map<Key, Value>
| Array<Value>
| { [Property in Key]: Value }
export type IteratableValue<
Key extends Property = Property,
Value = any
> = IteratableValueCore<Key, Value> & { length: number }
export interface IterateeFunction<Key extends Property = Property, Value = any>
extends Function {
(value: Value, index: number, iteratable: IteratableValue<Key, Value>): any
}