class Cache { private items: Map; private ttl: number; constructor(ttl: number) { this.items = new Map(); this.ttl = ttl; } // Add an item to the cache set(key: string, value: T): void { const expiration = Date.now() + this.ttl; this.items.set(key, { value, expiration }); // Auto-remove expired items setTimeout(() => { if (this.items.has(key) && this.items.get(key)!.expiration <= Date.now()) { this.items.delete(key); } }, this.ttl); } // Retrieve an item from the cache get(key: string): T | undefined { const item = this.items.get(key); if (!item || item.expiration <= Date.now()) { this.items.delete(key); return undefined; } return item.value; } // Remove an item delete(key: string): void { this.items.delete(key); } // Check if the cache contains a key has(key: string): boolean { return this.items.has(key); } } // Example usage const cache = new Cache(5000); // TTL: 5 seconds cache.set("key1", "value1"); setTimeout(() => { const value = cache.get("key1"); console.log(value ? `Value: ${value}` : "Key not found or expired"); }, 3000); setTimeout(() => { const value = cache.get("key1"); console.log(value ? `Value: ${value}` : "Key not found or expired"); }, 6000);