Hacker News new | ask | show | jobs
by gladimdim 3062 days ago
I have replied to this question on SO [1], here is quote:

In a large application you will need a lot of features, which are provided by default in ReasonML: strict types, runtime validation if you encode/decode JSON, fast compilation time, immutable data.

In TypeScript you will have to add:

1. ImmutableJS + its typings.

2. Runtime validators like json-schema + its typings. Then you will have to write types in TypeScript, and also defined a schema in json-schemas. They can become out of sync very soon.

3. Some crazy hacks to tell the difference if variable is of specific type (like in official docs of TS: https://www.typescriptlang.org/docs/handbook/advanced-types...., Paragraph "User-Defined Type Guards"). This checks are done using side effects like a.swim !== undefined. In 6 months this 'if' statement will contain more and more checks.

4. You are lucky if a package you use has official and maintained type definitions. Or you will end up with custom typings.

5. If you develop hybrid app in JS + TS, then TS Compiler cannot create a bundled final d.ts file which you can import in other parts of your project. You will have to write separate d.ts files, which are bundled by tools like dts-bundle. If you have everything in TS, then this issue is not applicable.

6. Large apps take a lot of time to be compiled by TypeScript.

With ReasonML:

1. Immutable data is in the language.

2. Runtime validators are present (bs-json has them by default).

3. Pattern matching saves you from these crazy checks.

4. You are lucky if npm package you want to use has BuckleScript bindings.

5. N/A.

6. ReasonML compilation is very fast.

1: https://stackoverflow.com/questions/46147250/reasonml-vs-typ...