Flow:接受多个类型作为函数参数

时间:2018-04-04 09:52:52

标签: flowtype

我正在尝试让函数c接受两种类型。除了Foo中的可选id属性之外,类型是相同的。即使我在使用之前检查id的存在,也会出现流错误。我尝试在这里和文档中搜索,但我找不到任何东西。

type Foo = {
  bar: string,
  id?: string,
}

type Bar = {
  bar: string,
};

const a = (args: Bar) => {
  b(args);
}

const c = (args: Foo) => {
  b(args);
}

const b = ({ bar, id }: Bar | Foo) => {
  // As soon as you use id here Flow errors out, even though id is optional
  // and I check for it’s existence.
  if (id) {
    console.log(id);
  }
}

View a working example on Try Flow

1 个答案:

答案 0 :(得分:1)

Flow目前(v0.69)在对象解构方面存在一些弱点,你可以在没有解构的情况下实现你想要的目标:

const b = (obj: Bar | Foo) => {
  if (obj.id) {
    console.log(obj.id)
  }
}