switch语句中更复杂的流类型细化

时间:2017-04-27 19:44:01

标签: javascript types flowtype

假设我有一个这样的代码,我有2个对象类型,我试图在switch语句中利用优化来支持更复杂的情况

/* @flow */

type Add = {
 type: "add",
 someAddSpecificStuff: 3,
};

type Sub = {
 type: "sub",
};

type Actions =
  | Add
  | Sub;

function reducer(model: number = 0, action: Actions): number {  
  switch(true) {
    case action.type === "add":
      return model + 1 + action.someAddSpecificStuff;
    case action.type === "sub":
      return model - 1;
    default:
      return model;
  }
}

这给了我:

  

27:返回模型+ 1 + action.addSpecific;                                         ^ property addSpecific

中找不到的属性      

27:返回模型+ 1 + action.addSpecific;                                  ^对象类型

然而,如果我这样做,显然有效:

switch (action.type) {
  case "add":
  ...

我正在试图使用上述模式的原因是能够捕获存储在数组中的所有类型,并重新使用该catch-all功能,例如:

switch(true) {
  case BIG_ARRAY_OF_OBJECT_TYPES.includes(action.type) {
    return action.somethingIKnowThatIsAlwaysPresentInTheseActions;
  }
}

这种事情通常是如何完成的?

0 个答案:

没有答案