> For the complete documentation index, see [llms.txt](https://strv.gitbook.io/frontend/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://strv.gitbook.io/frontend/a11y-0.0.1/project-guidelines/project-setup/static-type-checking.md).

# Static type checking

Languages [TypeScript](https://www.typescriptlang.org/) or [Flow](https://flow.org/) are very suitable for frontend development.

* Fewer bugs in run-time, because bugs are caught in compile-time
* Highly productive developer experience
* Better onboarding of new developers
* Easier to refactor and debug

## TypeScript

TypeScript is very popular these days. It’s developed by Microsoft, Angular from version 2 is completely written in it, backend developers love it and it’s become a more common language for libraries.

TypeScript is not, in fact, a programming language. It’s a typed superset of JavaScript. This means that any JavaScript is a TypeScript, and TypeScript adds extra features into JavaScript (besides types, ES6 syntax and JSX support). TypeScript is compiled into plain JavaScript.

### Benefits

* Common and with a high adoption rate within a large community
* Developed by Microsoft
* Great tooling and integration in code editors or IDEs
* A lot of typings for 3rd party libraries available

### Risks

* A bit of a harder learning curve, especially for junior developers
* Potentially hard configuration (you must know what are you doing)
* The official documentation is not up to date
* Before `babel7`, compiler must be used with TypeScript (tsc); this makes adoption and upgrading to TypeScript complex
* Requires a build step, which sometimes isn’t suitable—or the overhead just isn’t worth it

## Flow

Flow is developed by Facebook and used to be much more suitable for React than TypeScript. Flow had better support for React from the very beginning. Integration to an existing project was much easier and more straightforward than TypeScript. But these days, Flow is losing its popularity.

### Benefits

* Feels more like JavaScript
* You can simply add types to a file by adding @flow annotation at the beginning of a file

### Risks

* TypeScript is more performant and stable
* A lot of memory issues and editor integration problems
* People behind Flow are more focused on ReasonML last days

## ReasonML

ReasonML is a JavaScript-like syntax for OCaml that can be compiled into JavaScript. It’s quite new but looks very promising.

### Benefits

* Super fast and stable
* Fully typed and functional language
* Can compile to any platform supported by OCaml or JavaScript

### Risks

* Small community compared to JavaScript or TypeScript
* Difficult learning path
* Usually not preferred by clients because there aren’t enough developers
