|
|
|
|
|
by satvikpendem
197 days ago
|
|
The problem is the type system is not strong, where structural typing can cause a lot of issues, such as adding a property to an object for example and the typechecker will not care. This does not happen in more strongly, non-structural typed languages. |
|
But it's a double edged sword:
- You can brand types with additional information. For example, React Query does this to keep track of which type is stored under which cache-key. This is where most strongly typed languages just give up.
- You can progressively extend/narrow types without having to worry about inheritance. Invariants can be statically checked by encoding them in a type: eg IssuedInvoice = Invoice & { … }. A function that needs only a subset of a domain-object can specify this rather than requiring the email-address to verify a phone number.
- You can even emulate nominal types using keyed unions.
The first two alone have saved me from more errors than structural typing introduced.