如何使用Flow与async / await,promises和thenables?

时间:2017-03-30 16:40:28

标签: javascript flowtype

Flow可以做一些聪明的事情,比如this

type MyMap = WeakMap<number, string>;
const obj: MyMap = new WeakMap();
obj.set(123, 'bar'); // ok
obj.set('not', 'bar'); // flow error!

但是promises,thenables和async / await呢?

我希望有可能做到这一点:

type AsyncMultiplier = (number) => Thenable<number>;

const myTransform: AsyncMultiplier = async input => input * 2;

(async () => {
  (await myTransform(2)) * 5; // should be ok

  // forgetting to await the result:
  myTransform(2) * 5; // should give a type error
})();

有没有办法让Flow了解await,thenables等的语义?

1 个答案:

答案 0 :(得分:3)

Flow了解async / awaitPromiseThenable没有内置类型,但您可以定义自己的类型。

无论如何,在您的示例中,只需将Thenable替换为Promise即可获得预期的错误。请注意,如果您尝试对示例进行类型检查,则会出现以下错误:

1: type AsyncMultiplier = (number) => Thenable<number>;
                                      ^ identifier `Thenable`. Could not resolve name