| 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... |