Flow — статический анализ типов в JS от Facebook
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 Сортировка ошибок и фильтрация по файлам Улучшить сообщения об ошибках: причина ошибки и ее трейс Куча фич типизированных систем, таких как ограниченный полиморфизм, перечисления, анализ чистоты функций и многое другое Ссылки