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).