interface IntfKeyVal { (key: string, val: any): void } export class HashSet { private items: { [key: string]: T } constructor() { this.items = {} } set(key: string, value: T): void { this.items[key] = value } delete(key: string): boolean { return delete this.items[key] } has(key: string): boolean { return key in this.items } get(key: string): T { return this.items[key] } len(): number { return Object.keys(this.items).length } forEach(f: IntfKeyVal) { for (let k in this.items) { if (this.items.hasOwnProperty(k)) { f(k, this.items[k]) } } } }