reflection with typescript

by Terrance Smith

TypeScript

interface IStorage {
  getItem(key: string): any;
  setItem(key: string, value: any): void;
  removeItem(key: string): void;
  clearItems(): void;
}

abstract class StorageService implements IStorage {
  abstract getItem(key: string);
  abstract setItem(key: string, value: any): void;
  abstract removeItem(key: string): void;
  abstract clearItems(): void;
}

 class LocalStorageService implements StorageService {
  getItem(key: string): any {
    return localStorage.getItem(key);
  }

  setItem(key: string, val: any): void {
    localStorage.setItem(key, val);
  }

  removeItem(key: string) {
    localStorage.removeItem(key);
  }

  clearItems(): void {
    localStorage.clear();
  }
}

class Cachable {
  public saveToCache(storageService: StorageService) {
    const members = Object.keys(this);
    members.forEach(key => {
    	console.log(`key:{key}, value:{this[key])}`)
      // rageService.setItem(key, this[key]);
    });
  }
}

class TestUser extends Cachable {
  constructor(public username: string, public details: string) {
    
  }
}

let localStore = new LocalStorageService();
let usr = new TestUser('myUser', 'my details');

usr.saveToCache(localStore);