Opaque types in JavaScript: https://codemix.com/opaque-types-in-javascript/
Shows a nice compromise between wrapper types (stronger type guarantees) and primitive types (lots of functions already defined on the type).
Related Posts
Shower thought: Printing runtime values is far more useful for product types than sum types.
For a struct it's useful to see all the fields, but for a nullable int it's less useful to see 123.
The tradeoffs of type system design, and thinking about a gradual type checker for Elixir:
https://elixir-lang.org/blog/2022/10/05/my-future-with-elixir-set-theoretic-types/
Encoding a spell checker in Typescript types: https://github.com/kkuchta/TSpell
(Very impressive, though unsurprisingly it's slow)