News for hackers. Stuff that matters.
Re:TypeScript 3.5 by hajile on Wednesday May 29, 2019 @08:42PM (#20047252)
I 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).

Re:TypeScript 3.5 by negativegate on Wednesday May 29, 2019 @09:35PM (#20047555)
Interesting, 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>?

Re:TypeScript 3.5 by goblin89 on Thursday May 30, 2019 @02:00AM (#20048775)
It 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.