export interface Config { wsPort : number | string ; dbHost : string ; dbPort : number ; dbUri ? : string ; dbName : string ; reinitDbOnStartup : boolean ; [ extraProperties ] : any ; } param name param argv return export function getConfig < C extends Config > ( name , argv ) { return Object . assign ( { } , getDefaultConfig ( name ) , getConfigArg < C > ( argv ) ) ; } function getDefaultConfig ( name ) { return { dbHost : 'localhost' , dbPort : 27017 , wsPort : 3000 , dbName : `${ name }-db` , reinitDbOnStartup : true } ; } function getConfigArg < C extends Config > ( argv ) { let configArg ; try { configArg = JSON . parse ( argv . config ) ; return configArg ; } catch ( e ) { throw new Error ( `Couldn't parse config ${ argv . config }` ) ; } }