如何为多态函数声明流类型库定义
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
(如果你不使用参数,这就是隐式传递的内容)。
根据参数类型具有不同 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
(如果你不使用参数,这就是隐式传递的内容)。