51 ms·
Is it even possible for the program to know at compile-time if the types will be violated at run-time? Even if you declare data from other sources 'not mine' th
by pcthrowaway 5y ago
Is it even possible for the program to know at compile-time if the types will be violated at run-time? Even if you declare data from other sources 'not mine' this still seems like it would be impossible to do.
- danenania 5y agoYou can accomplish it with a library like zod[1]. It's not the prettiest though; first class support would definitely be better. 1 - https://github.com/colinhacks/zod https://github.com/colinhacks/zod
- jayshua 5y agoThe type system can force you to handle both cases - the data being in the expected & typed form, and the data not being in the expected form. You would have a function like this: parseJsonString : String -> Result Error Person Where Result is a value that is either an Error or a Person. To get the Person value out, the type system forces you to also do something with the Error if it exists. Not handling both possibilities in some way is a type error.
- bern4444 5y agoAs long as the data is from within the system, yes. If you're trying to use data from an external source (api request, external json file etc) than no, but that's true of most type systems. If you correctly type the response of that request then the answer becomes yes again.
- pcthrowaway 5y agoMaybe I misunderstood, but I thought the person I was responding to was suggesting having the option for sound typing enforced in typescript, at compile time. Because if it's at run-time... well the run-time is Javascript, so there's of course no typing there. This isn't really on Typescript There are however javascript libraries which allow you specify object schemas and throw errors when mismatches occur. Perhaps the suggestion then is to build some shared layer between the TS compiler and V8 so that similar schemas can be autogenerated by the TS compiler and enforced at run-time.
- rsrsrs86 5y agoThere is generally no typing in run time. One of the practices in writing compilers is to skip type checks during run time, because you know beforehand that no type errors are possible. That is type erasure. If you're interested, lookup existential types. Very interesting stuff.
- ragnese 5y ago> Is it even possible for the program to know at compile-time if the types will be violated at run-time? I mean, that's kind of the whole point of static typing, right? If you're speaking to TypeScript/JavaScript, specifically, then yeah, the compiler can't guarantee anything because someone can hop into the running program and start modifying objects as they please (at least for web page code). But the compiler could still make the weaker guarantee that "the code that I can see is soundly typed". And for 99% of us that's effectively the same thing.
- nesarkvechnep 5y agoTake a look at Elm.