流:无法细化类型

时间:2018-07-24 17:15:15

标签: flowtype

Link to Try Flow

在此问题中,发生了几种不同的事情:

我声明常量并为其分配特定类型:

const VAR1: 'var1' = 'var1';
const VAR2: 'var2' = 'var2';

然后我声明一个要查找其字段的对象。该字段的键是一个与上面的常量之一相对应的字符串:

type Values = {
  var1: string
}

const VALUES: Values = {
  [VAR1]: '11'
}

然后我声明一个变量,该变量可以是两个常量之一:

type X = typeof VAR1 | typeof VAR2

现在,我要检查变量是否与对象中用于字段名称的常量相同。如果是,那么我想从对象中获取相应的值:

function test(x: X) {
    if (x === VAR1) {
      return VALUES[x];
    }  
}

问题是,条件if (x === VAR1)无法执行动态类型优化,因此Flow不知道在行return VALUES[x]处x的类型为VAR1,并抱怨说值对象中没有var2字段。

如果用字符串文字'var1'替换常量,检查会起作用,但是有没有办法在保留常量的同时解决这个问题?

0 个答案:

没有答案