如何在不编辑代码本身的情况下为todo reducer定义类型?

时间:2017-01-24 16:32:48

标签: reactjs redux flowtype

1 个答案:

答案 0 :(得分:1)

我不确定你的意思是什么"没有编辑代码本身。"您需要在某些地方添加类型注释以便Flow来检查您的代码。无论如何,这是我为你的例子提出的类型:

type Action = {
  type: 'ADD_TODO',
  id: number,
  text: string,
} | {
  type: 'TOGGLE_TODO',
  id: number,
};

type State = {
  id: number,
  completed: boolean,
}

这里是完整的tryflow。我不认为有任何好的方式向Flow表达,当undefinedtodo时,您只会将action.type传递给ADD_TODO。最好在某种程度上重构代码。

请记住,Flow不是灵丹妙药。它是一个很好的工具,可以防止错误并使开发更容易,但作为静态检查的回报,你必须放弃一些它无法理解的模式。您会发现,您经常需要围绕Flow可以理解的方式构建代码(顺便说一下,我相信这会导致更好的设计选择,并使人们更容易理解)。类型安全不是免费的,这是所有类型检查员的基本限制。所以,不要期望它能够在没有你的情况下检查所有内容并编辑代码本身。"