5 ms·
I can't downvote you but I want to point out that the only thing you accomplish with such a comment is coming off as ignorant and bitter. I have no idea why on
by IceDane 7y ago
I can't downvote you but I want to point out that the only thing you accomplish with such a comment is coming off as ignorant and bitter.
I have no idea why on Earth you think the type system is broken. Objectively, it simply isn't, obviously, but I'd love to see you trip over your own feet trying to argue that it is.
Moreover, it's honestly remarkable how they've managed to retrofit such an amazing type system on top of an already existing language and have it feel so natural. It's truly an impressive feat of engineering.
- phiresky 7y ago> Objectively, it simply isn't, obviously To be fair, TS has some pretty bad unsoundness problems, especially regarding co/contra variance in generics, and for example some annoying weirdness with number/string keys in objects. Still, the type system is one of the most amazing ones I know.
- noir_lord 7y agoYeah but if you think about it they are putting a straight jacket on a madman while a committee organizes regular PCP shipments to said madman. That they got it to work amazes me, that they got it to work well astounds me. It's one of the few parts of my stack that I interact with every day I don't occasionally want to hunt down the creators of.
- JamesBarney 7y ago> It's one of the few parts of my stack that I interact with every day I don't occasionally want to hunt down the creators of. Reactive Extensions was definitely one of those pieces of stacks.
- hajile 7y agoI don't know if 3.5 fixes this, but here's an example from 3.4 function messUpTheArray(arr: Array<string | number>): void { arr.push(3); } const strings: Array<string> = ['foo', 'bar']; messUpTheArray(strings); const s: string = strings[2]; console.log(s.toLowerCase()) You obviously can't push a number into an Array<String>, yet typescript allows it. For my money, ReasonML is a better solution for type issues (hindley-milner types are awesome).
- negativegate 7y agoInteresting, though it does flag the push() as an error if you use "Array<string> | Array<number>" as the argument type. It almost seems like some sort of co/contravariance issue? A function that reads from an Array<string | number> should be able to accept either an Array<string> or an Array<number> (or Array<string | number>), but a function that mutates it should only be able to accept Array<string | number>?
- goblin89 7y agoIt seems like both projects have their own raisons d'être along with trade-offs. TS is pretty well-integrated with JS ecosystem and supported by a large player, but has an imperfect type system; Reason is more “puristic” with pattern matching and all, but you have to keep your eyes peeled for impedance mismatch. (The docs for Reason, or BuckleScript to be exact, have warnings like “If you come from JavaScript, a Reason object doesn't compile to a JS object” sprinkled here and there.) I personally encountered the case you described a couple of times but generally using TS still saved me a lot of time I’d have wasted debugging, with minimal time spent on getting into the ecosystem.