Exercise from a TypeScript course: >Create a map using TypeScript Generics. The key is always a string. >The value can be a string ***or*** a number. It has to work with ***both*** types. >It's got to have the following methods: >- Creating a new key-value pair : **setItem(key: string, item: T)** >- Retrieving values : **getItem(key: string)** >- Remove all items : **clear()** >- Display all key-value items : **printMap()** " Here my uncompiled TypeScript code: <!-- begin snippet: js hide: false console: true babel: false --> <!-- language: lang-js --> // -- THE ACTUAL IMPLEMENTATION -------------------------- class GenericMap < T extends number | string > { private items: object[] constructor() { this.items = []; } setItem(key: string, item: T): void { let tmp = {}; tmp[key] = item; this.items.push(tmp); } getItem(key: string): T { let ret = null; for (let i = 0; i < this.items.length; i++) { let curr = this.items[i]; if (curr[key]) { return curr[key]; } } return null; } clear() { this.items.length = 0; } printMap() { this.items.forEach((item) => { let key: string[] = Object.keys(item); console.log('{ "' + key[0] + '": ', item[key[0]], '}'); }); } } // ------- JUST TESTING -------------------- const numb = new GenericMap < number > (); numb.setItem('alpha', 7); numb.setItem('beta', 14); numb.printMap(); numb.clear(); numb.printMap(); const strMap = new GenericMap < string > (); strMap.setItem('color', 'Blue'); strMap.setItem('height', '54 cm'); strMap.printMap(); // --------------------------------------------- <!-- end snippet --> The compiled code as a live-demo: <!-- begin snippet: js hide: false console: true babel: false --> <!-- language: lang-js --> class GenMap { constructor() { this.items = []; } setItem(key, item) { let tmp = {}; tmp[key] = item; this.items.push(tmp); } getItem(key) { let ret = null; for (let i = 0; i < this.items.length; i++) { let curr = this.items[i]; if (curr[key]) { return curr[key]; } } return null; } clear() { this.items.length = 0; } printMap() { this.items.forEach((item) => { let key = Object.keys(item); console.log('{ "' + key[0] + '": ', item[key[0]], '}'); }); } } const numb = new GenMap(); numb.setItem('alpha', 7); numb.setItem('beta', 14); numb.printMap(); numb.clear(); numb.printMap(); const strMap = new GenMap(); strMap.setItem('color', 'Blue'); strMap.setItem('height', '54 cm'); strMap.printMap(); <!-- end snippet --> It works fine. But I guess there a better ways to solve these exercise. Especially my getItem-method has become rather long. **Has someone an idea to solve the exercise in a more elegant way?** **What do you think about my idea of storing objects within an array?** Looking forward to reading your answers and comments.