| ▲ | munk-a 6 hours ago | |||||||
Without any other context? Nothing - it's just a type alias... But the context this type of an alias should exist in is one where a string isn't turned into a PhoneNumber until you've validated it. All the functions taking a string that might end up being a PhoneNumber need to be highly defensive - but all the functions taking a PhoneNumber can lean on the assumptions that go into that type. It's nice to have tight control over the string -> PhoneNumber parsing that guarantees all those assumptions are checked. Ideally that'd be done through domain based type restrictions, but it might just be code - either way, if you're diligent, you can stop being defensive in downstream functions. | ||||||||
| ▲ | seanwilson 6 hours ago | parent | next [-] | |||||||
> All the functions taking a string that might end up being a PhoneNumber need to be highly defensive Yeah, I can't relate at all with not using a type for this after having to write gross defensive code a couple of times e.g. if it's not a phone number you've got to return undefined or throw an exception? The typed approach is shorter, cleaner, self-documenting, reduces bugs and makes refactoring easier. | ||||||||
| ▲ | thfuran 6 hours ago | parent | prev | next [-] | |||||||
>But the context this type of an alias should exist in is one where a string isn't turned into a PhoneNumber until you've validated it. Even if you don't do any validation as part of the construction (and yeah, having a separate type for validated vs unvalidated is extremely helpful), universally using type aliases like that pretty much entirely prevents the class of bugs from accidentally passing a string/int typed value into a variable of the wrong stringy/inty type, e.g. mixing up different categories of id or name or whatever. | ||||||||
| ▲ | barmic12 6 hours ago | parent | prev [-] | |||||||
one issue is it’s not a type alias but a type encapsulation. This have a cost at runtime, it’s not like in some functionnals languages a non cost abstraction. | ||||||||
| ||||||||