Skip to content

Instantly share code, notes, and snippets.

@josser
Created March 31, 2020 12:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save josser/b04201936b1527c830b6536daa9d2ba3 to your computer and use it in GitHub Desktop.
Save josser/b04201936b1527c830b6536daa9d2ba3 to your computer and use it in GitHub Desktop.
interface StoreOptions {
}
interface DbStoreOptions extends StoreOptions {
dsn: string
}
interface FileStoreOptions extends DbStoreOptions {
path: string
}
interface IStore {
get(): void;
}
class DbStore implements IStore {
constructor(options: DbStoreOptions) { }
get() {
console.log("beep beep");
}
}
class FileStore implements IStore {
constructor(options: FileStoreOptions) { }
get() {
console.log("tick tock");
}
}
function factory(storeName: string, storeOptions: StoreOptions): IStore {
const storeMap: {
[index: string]: any
} = { file: FileStore, db: DbStore }
return new storeMap[storeName](storeOptions)
}
const store = factory('file', { path: 'test' })
store.get()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment