4 ms·
You can still do this with classes in typescript: class Hash extends String {} https://www.typescriptlang.org/play/?#code/MYGwhgzhAEASkAtoFMAeAXZA7AJjAyugE4CW
by jacobsimon 2y ago
You can still do this with classes in typescript:
class Hash extends String {}
https://www.typescriptlang.org/play/?#code/MYGwhgzhAEASkAtoFMAeAXZA7AJjAyugE4CWWA5tAN4C+AUHcAPZYTrTnbJFibwRIAvNAAUZAA4BXdAC5obUhQCUc-kIB81OtGhFk6SUSzQsyAO5xEYrFPRKA3NAD0T6ADEmRaDmQBbFgq8JCwANNBg4uLYOGSUAEQIiMg4APpx0OhM0BLSdDT2DC7QAJI+YCAgAJ5hZsjQLFXQZmBY7JnQ4pAwiQLIMO3oCCQwAGaSWMDowViMAezMvp16atDCIj0IqohhObLyxLEq0ABGTEwgyC2rmlTauvqGxsSSyAX5ha4AoqhgixfQkggYE4s1Y7EB3GKNmkq2gcQgyGAenQABFeGA4gVmGDoBtYZxTDw+FYIUQobYHB9oAB1EiDJgw448XDJDKVKIQMKDbjIADkMCwWTIMWAQRYGUSbQQdWRj1ZCli2RgYFxiAAdHQiijkAA3ZAgJhRIgwXxgSooIhEFjIBkQRrES7sOnhZX3ciScBeBUUE6IsAQiU8-kmIW+XzJEi8OrYzAYcLodBgYDSnAZIXoMIXMAxH3tXzDCFhZBq8ga7EQc7Fg3kdbqzIAVUi3AAwpBkCIlJTNa4AHJMKbAOrcjpgHjhzDG8J6bLGMjMS2I9ieHxEUFsaCm9DJvqwhZLZBqESk8nSMIbBxAA https://www.typescriptlang.org/play/?#code/MYGwhgzhAEASkAtoF...
- brlewis 2y agoThat'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. For example: https://www.typescriptlang.org/play/?#code/GYVwdgxgLglg9mABOARgJwIZgCYFNsAiuAtnABQCUiA3gFCKIQA2GAzq4gIJgzEZM16DRDFYApDAHMQGNAC5EKOHCa4siALyJg-VrgDcQgL60hzNh04gocUihirBwkeKkz5i5avVadTPYYMJkKgkLAIiLhgkjBguADKcODYZBCyClY2dg64VHTOaLhQIGhIaWgAdKIS0rKIAPyIAEQAbmjKxE2ICk0ADtaI-VBNgYjBDBAIrCq4FUxwkmRRMXGJyWQALABMFBT6iAD0B4gAKgCevQkQaDC9UIy2vSyxrGZTM3MLS9GxCUk4ZDiAHcuDw+ExKLt9kdThcrjc7ohsHBcBwwHB7pNiE8MLFaCYgA https://www.typescriptlang.org/play/?#code/GYVwdgxgLglg9mABO... class Animal { isJaguar: boolean = false; } class Automobile { isJaguar: boolean = false; } function engineSound(car: Automobile) { return car.isJaguar ? "vroom" : "put put"; } console.log(engineSound(42)); // TypeScript complains console.log(engineSound(new Animal())); // TypeScript does not complain
- mason55 2y agoOr, 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); https://www.typescriptlang.org/play/?#code/MYGwhgzhAEASkAtoFMAeAXZA7AJjAyugE4CWWA5tAN4C+AUKJDAKIC2YJIKG2e0hpCtXp0A9KOgBJHMjAgQATwA00AO7JoAeyyK1YLOmjpN0AA5NoCRMhjGjCEjABmAVyzB0JbQ20RDwTVZzImR4CCQAXmgACitwgC44RBUyUxd0RL9BcgBKRIAjTU0QWSxoCIA+ajpoaBD0FyIy4hdkAG46Gg6fLD9ocmxkIjBMNg4uKOjU9MziMlzEsc5yqqoauuQGpugsZFVoJZAprDT0HI6RcQPUMCCS6BcIMAGevsehyRP08ugAIghkMB6gAREZgX4dAK9QzIdjLKIDXbDUZwo7vIifU7nOhiCQAdQQRVMEBU6jMTGQOGg+hQqOpMDAlkQr0M7HQwAQNh+ASCYBCYQQ0Vh4xU6Mx6XOQA https://www.typescriptlang.org/play/?#code/MYGwhgzhAEASkAtoF...
- jacobsimon 2y agoOops you’re right!
- yencabulator 2y agoGreat example of something that does not work. Javascript classes are structural by default, Typescript does nothing there. https://www.typescriptlang.org/play/?#code/MYGwhgzhAEASkAtoFMAeAXZA7AJjAyugE4CWWA5tAN4C+AUHcAPZYTrTnbJFibwRIAvNAAUZAA4BXdAC5obUhQCUc-kIB81OtGhFk6SUSzQsyAO5xEYrFPRKA3NAD0T6ADEmRaDmQBbFgq8JCwANNBg4uLYOGSUAEQIiMg4APpx0OhM0BLSdDT2DMys7JIQ3ACSNtLQwnFlwHroACK8YHEFRWzQiQI1HFw8fFalFVV2BYzgUNAACvoAcmC+yCgY0QTEsdT0dC7QTEziEAB0jAHsvgCeTUzkcnPoi8t9PQgTnUwgyMc+AEaS5BEcTMCEu2RgV28t2gZmQJCIOBAYKwS2ScjiYSuN3ISiAA https://www.typescriptlang.org/play/?#code/MYGwhgzhAEASkAtoF...
- mirekrusin 2y agoand works correctly in flow [0] [0] https://flow.org/try/#1N4Igxg9gdgZglgcxALlAIwIZoKYBsD6uEEAztvhgE6UYCe+JADpdhgCYowa5kA0I2KAFcAtiRQAXSkOz9sADwxgJ+NPTbYuQ3BMnTZA+Y2yU4IwRO4A6SFBIrGVDGM7c+h46fNRLuKxJIGWh8MeT0ZfhYlCStpHzNsFBAMIQkIEQwJODAQfiEyfBE4eWw2fDgofDBMsAALfAA3KjgsXGxxZC4eAw0G-GhcWn9aY3wWZldu-g1mbGqJUoBaCRHEzrcDEgBrbAk62kXhXFxJ923d-cPRHEpTgyEoMDaqZdW7vKgoOfaSKgOKpqmDA+d4gB5fMA-P6LCCMLLQbiLOoYCqgh6-GDYRYIXYLSgkRZkCR4jpddwPfJLZjpOBkO4AX34kA0SSeGBIJAABAAJdm1TkKBZQNhcgDKUgqCE5wHpAB0oPLbPZOTivjQFrySPyALycgAUFUYqWQnPspigCAAlCbNTqAHzS+WczksCRCShQTlfADuPL5BqgRokloA3JyAPThzkAMQglE5GhE0DNmTg0F4nIwjGMwslnNlIFqfNK+ALnLSnMNqXl9JD8sVyYknMplAAkoHUpzdQWyGBXQARTIYAt1x6NzlFrVdlWCEyZbC2vUt9tB0P1x64dlcgAKuwAcs5sAL5EKRZzxeapTL15HOcRGCQrA27E2RLR+xAECbdxID+Zp5OtSjs+JAQG0VgaGgQgIHqBberUtCVlyb4Jp+nLetgcCUGwgxeoebAmgWGZvh+Vq5CADQmCQaZQEkDQAAxWAATAAzAAbFY9EgPSQA https://flow.org/try/#1N4Igxg9gdgZglgcxALlAIwIZoKYBsD6uEEAzt...