export interface Factory < T > { create ( type , ... extras ) : T ; } export abstract class Builder < T > { abstract build ( ) ; } export abstract class Strategy { abstract execute ( ... extras ) ; } export type PropGetter < T , P = any > = ( value : T ) => P ;