質問: FluxのDispatcher.jsのソースを見てたら ``` class Dispatcher { _callbacks: {[key: DispatchToken]: (payload: TPayload) => void}; ``` の``と`_callbacks: {[key: DispatchToken]: (payload: TPayload) => void};` 上記以外にも ``` register(callback: (payload: TPayload) => void): DispatchToken { ``` といった書き方を見かけたのですがこれはどういった記法なのでしょうか?
回答: Dispatcher.js には `@flow` と書かれているので flow による型アノテーションされたJSです。 `` の部分は `Dispatcher` クラスをパラメータ付きで定義していて、パラメータ名を `TPayload` とするということです。(クラス ジェネリクス という) `_callbacks: {key: DispatchToken]: (payload: TPayload) => void}` は `_callbacks` メンバーの型を、次のような key-value [map object として宣言しています: * key: `DispatchToken` (string(の別名)として定義されている)、 * value: `TPayload` 型を受け取る関数。 value の型は `register` 関数の引数と同じです。この中に含まれている `=>` は @豚吐露 さんのいうとおりES6の記法でアロー関数というものです。 (Flux も flow も使ったことないので間違っていたら教えてください)