4 ms·
I have a feeling you're talking about an old version of typescript. Versions 2.2+ (currently 2.3.2) are sound (but not fully so, just like flow) with the right
by boubiyeah 9y ago
I have a feeling you're talking about an old version of typescript. Versions 2.2+ (currently 2.3.2) are sound (but not fully so, just like flow) with the right flag(s).
Here's the description of the "strict" compiler option that goes a long way to make your program more reliable :
"Enable all strict type checking options.
Enabling --strict enables --noImplicitAny, --noImplicitThis, --alwaysStrict and --strictNullChecks."
- tekacs 9y agoTypescript (even with all those options on) isn't even close to sound. Some of the soundness issues are by design (making directly overlayed JS code reasonable to type/interface with), some are due to 'taking too much time/design complexity if implemented'. I won't go into them one by one, but you can jump into most of the issues here to get a sense: https://github.com/Microsoft/TypeScript/issues?utf8=&q=Soundness https://github.com/Microsoft/TypeScript/issues?utf8=&q=Sound... https://github.com/Microsoft/TypeScript/issues?utf8=&q=unsound https://github.com/Microsoft/TypeScript/issues?utf8=&q=unsou... I won't take a position on the matter other than to say that it's a tricky balance and the TS team are at the very least extremely clear in saying that you should not be looking for a high degree of soundness here (JS interop is a higher priority). If those things are important, I would recommend Scala.js or PureScript or... anything more self contained (and remember that they're still ultimately dynamically typed on the JS boundary, just not inside the language). Here's the TS team explaining their position themselves: https://github.com/Microsoft/TypeScript/issues/9825#issuecomment-233843817 https://github.com/Microsoft/TypeScript/issues/9825#issuecom... https://github.com/Microsoft/TypeScript/issues/13003 https://github.com/Microsoft/TypeScript/issues/13003 (not the most cordial commenter unfortunately)
- boubiyeah 9y agoOh I know! You also can't control variance and it can display bad behaviors once in a while. Overall though, getting bitten by the unsoundness is fairly rare , imo.
- tekacs 9y agoWhen I started using Typescript (whilst at the time using Scala, Clojure and Python day to day), I ran into soundness issues constantly (daily). I think I wrote a lot of code assuming that the type checker was sound and could check my abstractions, only to find that it wasn't and it couldn't. If it were more sound, I would rely on the language to do more checking. I don't get bitten as much any more, but I'm pretty sure that's mostly because I know what tradeoffs the language is making and I use other mechanisms to ensure safety.
- raquo 9y agoI used 2.1, it has all the same flags, and I did turn them on because they're not enabled by default. It's completely insane without those flags, but even with them enabled I still ran into many surprises. For example, like the other poster mentioned, its handling of variance is simply appalling. And no, Flow is MUCH more sound, I have worked with both. Flow's limitations tend to be false negatives (code that should ideally work does not compile as is) whereas Typescript's are false positives (fails to detect type errors).