interface ValueObjectProps { [index: string]: any; } /** * @desc ValueObjects are objects that we determine their * equality through their structrual property. */ export abstract class ValueObject { public props: T; constructor(props: T) { let baseProps: any = { ...props, }; this.props = baseProps; } public equals(vo?: ValueObject): boolean { if (vo === null || vo === undefined) { return false; } if (vo.props === undefined) { return false; } return JSON.stringify(this.props) === JSON.stringify(vo.props); } }