2016-08-25 4 views
3

私はそれを参照してくださいImmutableJS has flow type annotations nowしかし、どのようにタイプを定義するのですか?たとえば:ImmutableJSタイプのフロータイプ定義を書くには?

const state : ??? = Immutable.fromJS({ name: 'chet', tags: ['something']}) 

私は通常のJSからタイプを定義することができますが、私は、これは、特定のキーでImmutable.Mapであることをどのように言うのですか?

答えて

1

私は

const state: Map<string, any> 

としてこのタイプを記述します。この状態はMap型であることになるだろう、とマップが文字列キーと(名前、タグ)を持つことになりますと、値は任意のだろうと述べています。
また、ノート、あなたは

import type { Map } from 'immutable'; 

を行う必要があるでしょうかそうでなければ、それはネイティブMap型だと思いますし、地図は、getまたはgetInメソッドを持っていないようにあなたは、エラーが表示されます。

2

今のところ問題は、不変のフロータイプはキーと値の組み合わせごとに1つの型定義しかサポートしていないことです。

だからimmutable.MapsはMap<keyType, valueType>

を受け入れimmutable.ListはList<valueType>

Immutable.fromJS({名: 'チェット'、タグ:[ '何か']})受け付ける

が同等であると({ 'チェット' タグ:名前リスト([ '何か])}マップする

をので、あなたのタイプの定義は次のようになり

Map<(string) | ('name', 'tags'), string | List<string>>

+0

Do不変フロータイプは、各キーと値の組み合わせに対して1つのタイプ定義しかサポートしていませんか? 'Map <{name:string、tags:List:}>'のようなことをしたいのですが、どのようにすればよいか分かりません。 – django09

+0

そのような特異性のための標準的なアプローチは不変レコードを使用することです。それは決して完璧ではありませんが、それはやります – l2silver

+0

@ I2silverああ、私は参照してください。状態管理のためにReduxを使用している場合、状態ツリー全体を不変のJSレコードにするのは良い考えですか? – django09

1

Map(またはfromS)の代わりにRecordを使用してください。これはあなたのコードに一番良いものではありません。特に、あなたの州がRecordを入れ子にしている場合には、型チェックのサポートは素晴らしいです。

// @flow 

import { Record, List } from 'immutable'; 
import type { RecordFactory, RecordOf } from 'immutable'; 

type StateProps = { 
    name: string, 
    tags: List<string>, 
} 

type State = RecordOf<StateProps>; 

const makeState: RecordFactory<StateProps> = Record({ 
    name: '', 
    tags: List(), 
}); 

const state: State = makeState({ 
    name: 'chet', 
    tags: List(['something']), 
}); 

// Or, to to create an instance of the default 
// const _state: State = makeState(); 
関連する問題