Аннотации типа потока и действительный источник JavaScript

Я играю с новой системой проверки типа потока Facebook.

В Flow, встречайте Underscore кажется, что они изменяют этот код JavaScript

var root = this;

в это

var root: any = this;

Но это уже не допустимый JavaScript, верно? Я понимаю, почему внешние файлы интерфейса были бы полезны, но как аннотации типов добавляются непосредственно в действительные источники JavaScript?

Ранее для комментариев JS использовался компилятор Google Closure и другие проекты.


person Ozten    schedule 22.11.2014    source источник
comment
Flow анализирует надмножество синтаксиса JavaScript; фактический код, который в конечном итоге запускается в браузере (или где-либо еще), представляет собой обычный JavaScript.   -  person Pointy    schedule 22.11.2014


Ответы (3)


Начиная с Flow 0.4.0, вы можете использовать синтаксис Flow в комментариях. Это решает вашу проблему. Итак, ваш пример будет выглядеть так:

var root/*: any*/ = this;

Это приводит к правильному синтаксису JavaScript, и нет необходимости транспилировать ваш код.

Более подробную информацию можно найти здесь: http://flowtype.org/blog/2015/02/20/Flow-Comments.html

person psiphi75    schedule 19.11.2015
comment
На самом деле нет веских причин не писать все аннотации Flow в виде комментариев. Он преобразует код потокового типа из области компиляции в JavaScript в старый добрый JavaScript, который просто работает где угодно. - person Már Örlygsson; 16.12.2016

Вы правы, этот код больше не является допустимым javascript. Это означает, что при использовании Flow в файле someJavascriptFile.js вам необходимо выполнить программу, которая удаляет код Flow из файла someJavascriptFile.js, т.е. называется транспилированием. Какой транспилятор использовать, зависит от того, как вы используете javascript, и, вероятно, со временем он изменится, поэтому я не буду ссылаться ни на один из них.

Вы также можете обернуть типы потока в комментарий, например. var name /*:string*/ = "Hello flow.", который действителен javascript, но, на мой взгляд, затрудняет чтение кода.

Теоретически движки Javascript когда-нибудь смогут изначально поддерживать синтаксический анализ Flow, но до этого еще далеко.

person Aidan Hoolachan    schedule 08.05.2017

Я пропустил код выполнения потока, где обсуждается добавление шага сборки для удаления аннотаций типов.

Вы можете использовать инструмент преобразования JSX (часть инструментов React), чтобы преобразовать ваши файлы в простой JavaScript

Я также нашел альтернативу flow-typestrip.

Мне больше нравятся файлы внешнего интерфейса для каждого модуля, так как вы можете избежать введения шага сборки.

person Ozten    schedule 22.11.2014