根据参数类型具有不同的返回类型,指定类型定义的多态方法的正确方法是什么?
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)中收到错误消息,但流程不会抱怨!
答案 0 :(得分:2)
是的,您给出的示例是如何声明重载函数。但是,您可能希望将第二行更改为:
declare function myFunc(_: void): number;
由于Flow允许使用过多的参数调用函数(尽管not for much longer),因此即使使用字符串调用函数,它也可以选择第二个重载。我建议的修改使得参数必须是undefined
(如果你只是放弃一个参数,这是隐式传递的。)