基于对象属性文字类型的脱节联合类型

时间:2019-09-05 11:32:19

标签: javascript flowtype

我正在尝试正确键入其定义根据其属性之一的值而变化的对象。在下面的type中使用常量可以很好地工作(即:用type: typeA替换type: 1可以修复错误),但是为了清楚起见,我想使用从共享{ {1}}。为什么流程对此不满意?

constants.js

try it

1 个答案:

答案 0 :(得分:0)

您需要将A和B声明为类型,然后使用typeof

进行切换
/* @flow */

type A = 1;
type B = 2;

type pA = {
  type: A,
  vA: string,
};

type pB = {
  type: B,
  vB: string,
};

type p = pA | pB;

const getV = (proj): string => {
    switch (proj.typeof) {
      case "A": {
        return proj.vA;
      }
      case "B": {
        return proj.vB;
      }
    }
  return '';
}