如何在带有Union的Flow中编写内联咖喱函数类型?
以下示例可以正常工作:
type Foo = () => () => string;
function func(foo: Foo): string {
return foo()();
}
这是工会的问题:
type Foo = () => string | () => () => string;
function func(foo: Foo): string {
const f = foo();
if (typeof f === 'function') {
return f(); // Cannot return `f()` because function type [1] is incompatible with string [2].
}
return f;
}
但是,可以通过以下方法解决此问题:
type TF = () => string;
type Foo = TF | () => TF;
function func(foo: Foo): string {
const f = foo();
if (typeof f === 'function') {
return f();
}
return f;
}
那么我该如何用Union编写内联咖喱函数类型?
答案 0 :(得分:2)
问题在这里:
const a = { b: 1 }
a.__proto__ = null; // <-- set prototype of a to null
console.log(a)
// outputs [Object: null prototype] { b: 1 }
当前这是说type Foo = () => string | () => () => string;
是一种函数类型,返回类型为:
Foo
这不是您想要的。如果您添加一些括号,则流程将对此具有适当的意义:
string | () => () => string
(Try Flow)