The problem with this is the explosion of types when you start with combinations. Stuff like VerifiedEmailOptedOutOfMarketing.
I can see a type system designed from the ground up to do something like this. But as a bolt on to existing languages it's pretty clunky.