在当前的react / redux项目中使用flowtype 我在我的actions.js文件中定义了一个不相交的联合类型:
export type ArticleAction =
{ type: 'ARTICLE_SET_EDITION' }
| { type: 'ARTICLE_BLABLA', blip: string };
然后在我的减速机中我有
import type { ArticleAction } from './actions';
[...]
const articlesReducer = (state: any = initialState, action: ArticleAction): any => {
if (action.type === 'ARTICLE_BLABLA') {
const test = action.blip.shoups;
return test;
}
}
Flow无法检测到问题。
但是!如果我直接在reducer.js中声明ArticleAction,它确实认识到action.blip.shoups无效,因为blip是一个字符串。
对我做错了什么的想法? THX
答案 0 :(得分:2)
TL; DR 在今天的情况下,流量不会出现错误,但很可能会在将来出现。
这与导入/导出甚至联合类型没有任何关系,你可以简化它一直到这个:
function method(val: 'foo') {
if (val === 'bar') {
// unreachable...
}
}
Flow可以看出这是一个不可能的改进,并且可以知道内部代码是无法访问的。但是,Flow在无法访问的方案中不会出错。今天它只是将val
的值标记为该代码路径中的“空”类型并继续前进。
我们已经开始为此可达性分析奠定基础,并将在未来版本的Flow中使用它来创建错误。
我们还可以使用可达性分析来测试穷举,即:
function method(val: 'foo' | 'bar') {
if (val === 'foo') {
// ...
} else if (val === 'bar') {
// ...
} else {
// possibilities of val have been exhausted, this is unreachable...
}
}
这些是常见的请求,我们正在研究它们。