【问题标题】:Flow typing reducer produces no errors流式减速器不会产生错误
【发布时间】:2017-11-18 00:04:30
【问题描述】:

我是 flowtypes 的新手,想在输入这个 reducer 时寻求帮助。

// @flow

type State = {
  [id: string]: boolean
};

type Action = { type: 'SET_ID', id: number, someValue: string };

function reducer(state: State, action: Action): State {
  switch (action.type) {
    case 'SET_ID':
      const { id, someValue } = action;
      return { [id]: someValue };
    default:
      (action: empty);
      return state;
  }
}

我正在传递带有 id 作为数字和 someValue 作为字符串的操作,但状态 id 应该是字符串,而 someValue 应该是布尔值。 Flow 产生 0 个错误。有什么想法吗?

谢谢!

【问题讨论】:

    标签: reactjs redux flowtype


    【解决方案1】:

    我使用 flow 已经有一段时间了,还不是专业人士,但我想我可以帮上忙。我在下面做的是虽然 ID 是一个变量,但我认为不需要为它分配一个键 - 它只是一个字符串。它只分配了一个变量,因为您将它传递给一个函数并使用它 - 所以它所需要的只是一个字符串。这样,如果您传递一个数字,它现在应该会抛出一个错误,因此您可以决定是先将数字转换为字符串,还是先将初始项目更改为数字而不是状态类型中的字符串.

    那么someValue就是key(string)的值,也应该是字符串而不是布尔值。

    type State = {
      [string]: string
    };
    
    type Action = { type: 'SET_ID', id: number, someValue: string };
    
    function reducer(state: State, action: Action): State {
      switch (action.type) {
        case 'SET_ID':
          const { id, someValue } = action;
          return { [id.toString()]: someValue };
        default:
          (action: empty);
          return state;
      }
    }
    

    reducer 返回的数据示例如下:

    {'1231413413324': 'my new value from the reducer'}
    

    【讨论】:

    • 感谢您的帮助,是的,我故意声明了错误的类型,以检查如果我传递了错误的类型,流程是否会给我错误,但事实并非如此。在 flow repl 上尝试了您的示例,并且在 id 上删除 toString() 应该会抛出错误,即 id 应该是字符串,但事实并非如此。在 flow github github.com/facebook/flow/issues/2928 上发现了这个问题,似乎是一个错误(?)。不知道现在该怎么办
    • 当我回来仔细检查它是否引发错误时,我必须检查我的项目。但我认为在文档中明确指出,在创建键/值对时,您不需要将 ID 指定为键。我看看能不能找到链接
    • 是的,好的,谢谢,我几乎所有的减速器都带有计算键,所以我不能输入它们。关于命名密钥,仔细检查了文档,你是对的,它是可选的:)。
    • 所以我检查了我的减速器 - 是的,将它从​​字符串更改为数字似乎没有引发任何错误,哈哈 :(
    • 感谢您的检查!似乎流在这种情况下有点没用。 ;/
    猜你喜欢
    • 2015-01-02
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    相关资源
    最近更新 更多