Write safer TypeScript with branded types
The unintended side effects of TypeScript's distributive types