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

时间:2017-05-09 15:34:14

标签: flowtype flow-typed

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

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)中收到错误消息,但流程不会抱怨!

1 个答案:

答案 0 :(得分:2)

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

declare function myFunc(_: void): number;

由于Flow允许使用过多的参数调用函数(尽管not for much longer),因此即使使用字符串调用函数,它也可以选择第二个重载。我建议的修改使得参数必须是undefined(如果你只是放弃一个参数,这是隐式传递的。)