Flow 0.4.0以降、Flow固有の構文を特別なコメント内に記述できます。これらの特別なコメントを使用すると、コードを実行する前にFlow固有の構文を変換する必要がなくなります。特別なコメントを含めないでコードを記述することを強く推奨しますが、この機能は、Flow削除変換を自身のセットアップに適切に適用できない人々に役立ちます。これは私たちの最も要望の多かった機能の1つであり、さらに多くの人がFlowを使用できるようになると願っています!
この機能によって、3つの特別なコメントが導入されます: /*:
、/*::
、および/*flow-include
。Flowはこのような特殊なコメントで囲まれたコードを読み込み、そのような特殊なコメントトークンが存在しないかのようにコードを処理します。これらの特殊なコメントは有効なJavaScriptブロックコメントなので、JavaScriptエンジンはこのようなコメントで囲まれたコードを無視します。
Flowコメント構文
Flowが現在サポートしている特別なコメントは3つあります。この構文は、Jarno Rantanenの優れたプロジェクト、flotateで見られる構文に似ています。
1. /*:
/*: <your code> */
は、Flowによって: <your code>
として解釈されます。
function foo(x/*: number*/)/* : string */ { ... }
としてFlowによって解釈されます。
function foo(x: number): string { ... }
しかし、(コメントを無視した)JavaScriptエンジンには次のように表示されます。
function foo(x) { ... }
2. /*::
/*:: <your code> */
は、Flowによって<your code>
として解釈されます。
/*:: type foo = number; */
としてFlowによって解釈されます。
type foo = number;
しかし、(コメントを無視した)ランタイムには次のように表示されます。
3. /*flow-include
/*flow-include <your code> */
は、Flowによって<your code>
として解釈されます。/*::
と同じように動作します。
/*flow-include type foo = number; */
としてFlowによって解釈されます。
type foo = number;
しかし、(コメントを無視した)ランタイムには次のように表示されます。
注: /*
の後に、:
、::
、またはflow-include
の前に空白が含まれていない場合は無視されます。したがって、次のようなものを作成できます。
/* : number */
/* :: type foo = number */
/* flow-include type foo = number */
今後予定されている作業
Flow構文を完全に削除するのではなく、Flow構文をこのように特殊なコメントで囲むようにFlow変換を更新する予定です。これにより、人々はFlowコードを作成できますが、Flowの有無に関わらず機能するコードを公開できます。
謝辞
Jarno Rantanenにflotateを構築し、シンタックスをFlowの上流にマージすることをサポートしてくれたことに感謝します。