Flow — это средство проверки статических типов для JavaScript, которое мы создали в Facebook. Общая миссия Flow — предоставить разработчикам JavaScript захватывающий опыт кодирования — быстрый цикл редактирования-обновления — даже по мере развития и роста кодовой базы. Говоря инженерным языком, мы определяем две конкретные цели, важные для этой миссии: точность и скорость. Эти цели повсеместно определяют дизайн и реализацию.
Точность
Ошибки JavaScript могут иметь значительное влияние на Facebook. Разработчики хотят найти и исправить как можно больше ошибок к тому времени, когда их код будет запущен в производство. Поэтому мы должны заботиться о прочности. В то же время мы также должны позаботиться о том, чтобы не сообщать слишком много ложных ошибок, потому что низкое отношение сигнал/шум подразумевает низкую скорость исправления.
Другими словами, мы хотим, чтобы анализ Flow был точным на практике — он должен достаточно точно моделировать основные характеристики языка, чтобы понять разницу между идиоматическим кодом и непреднамеренными ошибками.
Скорость
Точность обычно достигается за счет скорости. Но в то время как точный анализ желателен, большая часть привлекательности JavaScript теряется, если мы замедляем цикл редактирования-обновления, заставляя разработчиков ждать, пока мы компилируем.
Другими словами, мы должны спроектировать анализ Flow так, чтобы он был чрезвычайно быстрым — он должен реагировать на изменения кода без заметной задержки, но при этом быть достаточно точным на практике.