如何为多态函数声明流类型库定义

How to declare a flowtype library definition for polymorphic functions

根据参数类型具有不同 return 类型的多态方法指定类型定义的正确方法是什么?

index.js:

// @flow
import {func1} from './lib1';
const s: string = func1('string');
const b: boolean = func1(); // should cause type error but does not!

lib1.js:

export function func1(p) {
    return (typeof p === 'string') ? p : 0;
}

defs/lib1.js.flow

// @flow
declare module "lib1" {
    declare export function func1(p: string): string;
    declare export function func1(_: void): number;
}

.flowconfig:

[libs]
defs/

我本来希望在 index.js(4) 中收到一条错误消息,但流没有抱怨!

是的,你给出的例子是如何声明一个重载函数。但是,您可能希望将第二行更改为:

declare function myFunc(_: void): number;

由于 Flow 允许使用太多参数调用函数(尽管 not for much longer),即使使用字符串调用函数,它也可能 select 第二次重载。我建议的修改使得参数必须是 undefined(如果你不使用参数,这就是隐式传递的内容)。