FluxのDispatcher.jsのソースを見てたら

```

    class Dispatcher<TPayload> {
      _callbacks: {[key: DispatchToken]: (payload: TPayload) => void};
    
```

の`<TPayload>`と`_callbacks: {[key: DispatchToken]: (payload: TPayload) =>
void};`

上記以外にも

```

    register(callback: (payload: TPayload) => void): DispatchToken {
    
```

といった書き方を見かけたのですがこれはどういった記法なのでしょうか？
CC BY-SA 3.0
2017-12-12T18:50:36.167
40232
2017-12-15T05:02:25.913
2017-12-13T03:27:54.140
3054
26616
question
javascript redux
JavasScriptのこの書き方は？
[Dispatcher.js](https://github.com/facebook/flux/blob/master/src/Dispatcher.js)
には `@flow` と書かれているので flow による型アノテーションされたJSです。

`<TPayload>` の部分は `Dispatcher` クラスをパラメータ付きで定義していて、パラメータ名を `TPayload`
とするということです。（[クラス ジェネリクス](https://flow.org/en/docs/types/classes/#toc-class-
generics) という）

`_callbacks: {[key: DispatchToken]: (payload: TPayload) => void}` は
`_callbacks` メンバーの型を、次のような key-value [map
object](https://flow.org/en/docs/types/objects/#toc-objects-as-maps)
として宣言しています：

  * key: `DispatchToken` （string（の別名）として定義されている）、
  * value: `TPayload` 型を受け取る関数。

value の型は `register` 関数の引数と同じです。この中に含まれている `=>` は @豚吐露
さんのいうとおりES6の記法でアロー関数というものです。

（Flux も flow も使ったことないので間違っていたら教えてください）
CC BY-SA 3.0
2017-12-15T05:02:25.913
40294
2017-12-15T05:02:25.913
5469
40232
answer