我真的无法想到比这更基本的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.
我在做错什么,如何使这种逻辑起作用?
答案 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);
}
}