流:为什么instanceof Type失败?

时间:2018-09-03 01:18:12

标签: javascript flowtype

我真的无法想到比这更基本的Union类型用例:

test.js

// @flow
type Foo = {
  a: string,
  b: number
}

function func(o: Foo | string) {
  if (o instanceof Foo) {            // <<<<< ERROR
    console.log(o.a);
  } else {
    console.log(o);
  }
}

Flow在行上给我一个错误:

o instanceof Foo

与此:

Cannot reference type Foo [1] from a value position.

我在做错什么,如何使这种逻辑起作用?

1 个答案:

答案 0 :(得分:2)

在您的示例中,Foo只是一个Flow类型(将从编译代码中剥离),而instanceof是本机JavaScript。

JavaScript的instanceof通过检查对象是否为构造函数的实例来工作。它不了解您的Flow类型,因此无法检查对象是否为该类型。

您可能想改用typeof

function func(o: Foo | string) {
  if (typeof o === 'string') {
    console.log(o);
  } else {
    console.log(o.a);
  }
}