That's distinguishing the String class from primitive string. I don't think that would still work with another `extends String` the same shape as Hash.
Or, a version that's more inline with the post you're replying to.
Just add an Email class that also extends String and you can see that you can pass an Email to the compareHash function without it complaining.
class Hash extends String {}
class Email extends String {}
// Ideally, we only want to pass hashes to this function
const compareHash = (hash: Hash, input: string): boolean => {
return true;
};
const generateEmail = (input: string): Email => {
return new Email(input);
}
// Example usage
const userInput = "secretData";
const email = generateEmail(userInput);
// Whoops, we passed an email as a hash and TS doesn't complain
const matches = compareHash(email, userInput);
class Hash extends String {}
https://www.typescriptlang.org/play/?#code/MYGwhgzhAEASkAtoF...