Redux动作类型的字符串与常量

时间:2018-02-21 13:38:20

标签: typescript redux flowtype

正如Redux guide中所建议的,建议的方法是为Redux操作类型定义字符串常量:

const FOO = 'FOO';
const BAR = 'BAR';

dispatch({ type: FOO });

据我了解,大多数已解决的问题都适用于非类型化的JavaScript,并且常量对于静态类型的应用程序是多余的:

type actionTypes = 'FOO' |
                   'BAR';

dispatch<actionTypes>({ type: 'FOO' });
dispatch<actionTypes>({ type: 'BAZ' }); // type error

是否存在不使用上述常量的特定问题?

这个问题同时适用于TypeScript和Flow,因为它们在这方面似乎相似。

2 个答案:

答案 0 :(得分:0)

PropTypes相同,在typescript中是多余的,动作常量是多余的。

redux操作中常量的原因是为了避免拼写错误。您将在拼写错误而不是静默缩减器上获得运行时错误。使用TypeScript,您不需要

- )

答案 1 :(得分:0)

Redux source code中可以看出,动作类型常量的优点是它们可以被命名空间:

export const ActionTypes = {
  INIT: '@@redux/INIT'
}

同样的事情需要在使用字符串的代码中进行许多更改。