6

このコードでは、フローはdog状態に設定されている値について文句を言っていません。NamespaceData定義を無視しているようです。タイプを設定したので、文句を言う必要があります。私は核種で実行していますが、フローは他のすべてに対して適切に機能しています。

、、actionなどのすべてのプロパティは文字列です。namespaceprojectcollection

// @flow

import { NAMESPACE_SET } from '../actions/NamespaceActions'

type NamespaceData = {
  project: string,
  collection: string,
}

type NamespaceState = {
  [namespace: string]: NamespaceData,
}
const initialState: NamespaceState = {}

function namespaceReducer(state: NamespaceState = initialState, action: Object): NamespaceState {
  switch (action) {
    case NAMESPACE_SET: {
      return {
        ...state,
        [action.namespace]: {
          project: action.project,
          collection: action.collection,
          dog: 1,
        }
      }
    }
  }
  return state
}

export default namespaceReducer
4

1 に答える 1

7

デフォルトでは、フローはオブジェクトの未知のプロパティについて厳密ではありません。

// @flow

type Thing = {
  known: string;
};

var obj: Thing = {
  known: 'hi',
  unknown: 4,
};

タイプに含まれていなくても、タイプチェックは問題ありunknownません。

フロー0.32 の内容

  • 正確なオブジェクト タイプの新しい構文: use {| { と } の代わりに |} を使用します。{x: string} には、少なくともプロパティ x が含まれています。{| x: string |} にはプロパティ x のみが含まれます。

あなたの例では、次のような正確なオブジェクト構文が必要です。

type NamespaceData = {|
  project: string,
  collection: string,
|};
于 2016-11-22T03:47:47.677 に答える