2017-01-05 5 views
3

私はフローに新しく、私はそれが不変のJSのマップで動作するようにする方法を理解しようとしています。私はフローを実行すると、私は次のエラーが、期待されますフローとImmutable.jsマップ

// @flow 

import { Map } from 'immutable'; 

let myMap: Map<string, number> = new Map({ a: 'a' }); 

myMap = myMap.merge({ a: 'a' }); 

: - - :

src/js/a.js:7 
    7: myMap = myMap.merge({ a: 'a' }); 
           ^^^ string. This type is incompatible with 
    5: let myMap: Map<string, number> = Map({ a: 'a' }); 
          ^^^^^^ number 

私の質問は、なぜnew Map({ a: 'a' });は次のようにマークされていないされて

私は、次のコードを持っていますエラー?

これをエラーにすることはできますか? Flow onを適用しようとしている私の既存のプロジェクトでは、同様の使い方がたくさんあり、Flowがその型チェックを実施できるのは素晴らしいことです。

ありがとうございます。

答えて

0

Hmm。私も流れを学んでいますが、それはバグのようです。不変のMapクラスのためのフロー宣言は次のようになります。

declare class Map<K,V> extends KeyedCollection<K,V> { 
    static <K, V>(): Map<K, V>; 
    static <V>(obj?: {[key: string]: V}): Map<string, V>; 
    ... 

興味深いことに、

const mapIngredients: { [string]: number } = { a: 'a' } 

は、 'A' にトリガーフローエラーを行います。フローが型をチェックして引数をMapにチェックすると何かがうまくいかないようです。実際、Map(123)の型チェック:/

フローバージョン:0.37.4

関連する問題