Включаются ли аннотации типа потока в производственный код во время выполнения?

У меня есть общий вопрос о Flow.

В настоящее время я использую библиотеку React prop-types для определения типов свойств компонентов. Эти проверки исключены из производственного кода, поэтому данные из внешних источников все еще могут привести к сбою скрипта.

<Foo bar={i} />

Пример: Допустим, у меня есть компонент Foo, у которого есть свойство bar с числовым типом реквизита. Пока я кодирую, меня уведомят, если я попытаюсь случайно передать строку в реквизит панели Foo. Однако, как только код запускается, эта проверка работоспособности удаляется.

Остается ли Flow в рабочем коде? Под этим я подразумеваю, продолжая приведенный выше пример, если бы я использовал Flow, выдал бы Flow ошибку во время выполнения, если кто-то попытается передать строку в свойство bar Foo?


person mrbinky3000    schedule 20.06.2017    source источник
comment
Как вы получаете внешние данные в свое приложение, если у этих данных нет типов? Если вы не отметили его any, Flow все равно потребует от вас проверки типов ввода.   -  person loganfsmyth    schedule 20.06.2017


Ответы (1)


Все зависит от ваших инструментов сборки. . Ни Flow, ни React не удалят аннотации типов сами по себе.

Одно из основных различий между типами реквизитов React и Flow заключается в том, что типы реквизитов React являются динамическими, а Flow — статическими. Это означает, что Flow не будет выдавать никаких ошибок во время выполнения, он выполняет проверки статически.

Это означает, что Flow по замыслу будет удален из любого скомпилированного кода независимо от среды.

Here's a demo on how Babel компилирует его.

Если по какой-то причине вы хотите удалить аннотации Flow из самого кода разработки, вы можете использовать один из следующих способов:

Подключаемый модуль Babel: преобразование типов полос потока

Инструмент командной строки: Типы удаления потока

Если вам нужна динамическая проверка типов с использованием семантики Flow, ознакомьтесь с flow-runtime.

person nem035    schedule 20.06.2017
comment
Как вы сказали, я использую плагин babel для удаления моих реагирующих свойств. Однако, даже если я не удалю proptypes, если я установлю для переменной среды React значение production, она пропустит проверки proptype. Вы просто получаете код с большим количеством объявлений proptype, которые игнорируются. Вот почему они изобрели этот плагин для Babel, чтобы удалить практически неиспользуемый код, сэкономив вам kb. Если вы настроите среду React на производство, реакция пропустит проверку типа потока? Или они все равно будут бегать? - person mrbinky3000; 20.06.2017
comment
Поток @ mrbinky3000 не выдает ошибок во время выполнения, проверьте мое редактирование. - person nem035; 20.06.2017
comment
flow-runtime выглядит так, как будто он сделает то, что я прошу. Спасибо! - person mrbinky3000; 20.06.2017