2017-01-05 5 views
3

Я новичок в Flow, и я пытаюсь выяснить, как заставить его работать с неизменяемой картой JS.Flow and 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

Хм. Я тоже изучаю поток, но это похоже на ошибку. Декларация потока для класса 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' } 

делает триггер ошибки потока на 'а'. Кажется, что что-то идет не так, когда поток typechecks аргумент Map. Действительно, даже Map(123) typechecks:/

версия для потока: 0.37.4