使用Union的FlowJS内联咖喱函数类型

时间:2019-05-07 07:34:46

标签: javascript types flowtype

如何在带有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编写内联咖喱函数类型?

Try Flow

1 个答案:

答案 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