Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Flow:instanceof Type为什么失败?_Javascript_Flowtype - Fatal编程技术网

Javascript Flow:instanceof Type为什么失败?

Javascript Flow:instanceof Type为什么失败?,javascript,flowtype,Javascript,Flowtype,我真的想不出比这更基本的联合类型用例了: 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); } } 为此: Cannot

我真的想不出比这更基本的联合类型用例了:

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);
  }
}
为此:

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

我做错了什么?我如何使这个逻辑工作?

在您的示例中,
Foo
只是一个流类型(从编译代码中剥离),但它是本机JavaScript

JavaScript的
instanceof
通过检查对象是否是构造函数的实例来工作。它不知道您的流类型,也无法检查对象是否为该类型

您可能想改用
typeof

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