if a user with/without phone number are equally valid states to be then types won't help you much. I think it's more about writing
class User{phone: ?PhoneNumber}
class User{phone: ?string}.
To expand and give some notion of good taste:
It's more about writing
struct User {phone: MaybePhoneNumber} // give or take, it's a monoid
struct User {phone: Option<String>}
To expand and give some notion of good taste:
It's more about writing
over