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);