ValueObject
Can be used to measure or describe things (name, description, amount, height, date, time, range, address, etc.)
import { Result, ValueObject } from 'types-ddd';
interface Prop {
value: string;
}
class EmailValueObject extends ValueObject<Prop> {
private constructor(prop: Prop) {
super(prop);
}
get value(): string {
return this.props.value;
}
public static isValidEmail (email: string): boolean {
const regex = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/g;
return regex.test(email);
}
public static create(value: string): Result<EmailValueObject> {
const isValid = EmailValueObject.isValidEmail(value);
if (!isValid) {
return Result.fail<EmailValueObject>('Invalid email');
}
return Result.ok<EmailValueObject>(
new EmailValueObject({ value: value.toLowerCase() }),
);
}
}
Last updated