Javascript Flow:instanceof Type为什么失败?
我真的想不出比这更基本的联合类型用例了: test.jsJavascript 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
// @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);
}
}