Libs provide something out of the box to do this, e.g. `ts-essentials` provides `Opaque`, so you just write `type DateString = Opaque<string, 'DateString'>`
The class/private approach has the advantage of hiding the extra property from everything except the type checker.