Flow — это статический анализатор кода и набор синтаксических конструкций, для прямого указания типа переменной. В отличии от TypeScript, есть возможность делать код типизированным постепенно. Фактически можно взять любой проект на js и сразу начать использовать Flow (аналогично LESS для CSS).
Есть 3 режима:
- Не проверять ничего, по умолчанию
- Проверка без использования аннотаций (с коментарием-аннотацией, как в React)
- Строгое указание типа переменной (с внесением изменения непосредственно в код)
/* @flow */
function foo(x) {
return x * 10;
}
foo('Hello, world!');
$> flow
hello.js:5:5,19: string
This type is incompatible with
hello.js:3:10,15: number
В данном случае анализатор самостоятельно вывел тип переменной, но можно и подсказать:
/* @flow */
function foo(x: string, y: number): string {
return x.length * y;
}
foo('Hello', 42);
$> flow
hello.js:3:10,21: number
This type is incompatible with
hello.js:2:37,42: string
Также есть weak режим, позволяющий проверять код на ошибки, которые легко быстро исправить:
- Потенциально возможные значения
undefined
иnull
, которые легко исправить добавлением проверки - Примитивне ошибки с типами, вроде
true + 3
Установка
Flow написан на OCaml (>=4.01.0).
Для OSX и Linux есть бинарные сборки, Windows не поддерживается.
Для тех, кто пишет на OCaml, можно воспользоваться пакетным менеджером OPAM:
opam install flowtype
А пользователям OSX есть возможность поставить через Brew:
brew install flow
Планы на будущее
- Поддержка существующих для TypeScript файлов интерфейсов (.d.ts) с DefinitelyTyped.org в аналогичный формат для Flow
- Поддержка модулей ES6
- Компиляция Flow в JS с помощью js_of_ocaml
- Интеграция с редакторами кода и IDE
- Сортировка ошибок и фильтрация по файлам
- Улучшить сообщения об ошибках: причина ошибки и ее трейс
- Куча фич типизированных систем, таких как ограниченный полиморфизм, перечисления, анализ чистоты функций и многое другое
Ссылки
Автор: hell0w0rd