Skip to content

Instantly share code, notes, and snippets.

View foretoo's full-sized avatar

Sergey Borovikov foretoo

View GitHub Profile
@foretoo
foretoo / TypedMap.ts
Created August 20, 2023 13:00
Extension of a loosely typed Map<K, V> generic in TypeScript
interface TypedMap<M extends Record<string | number | symbol, any>> extends Map<keyof M, any> {
get: <K extends keyof M>(key: K) => M[K]
set: <K extends keyof M>(key: K, value: M[K]) => this
has: <K extends keyof M>(key: K) => boolean
delete: <K extends keyof M>(key: K) => boolean
forEach: (callbackFn: (value: M[keyof M], key: keyof M, map: TypedMap<M>) => void, thisArg?: any) => void
entries: () => IterableIterator<[ keyof M, M[keyof M] ]>
keys: () => IterableIterator<keyof M>
values: () => IterableIterator<M[keyof M]>
[Symbol.iterator]: () => IterableIterator<[ keyof M, M[keyof M] ]>