nrs*_*ser 6 javascript overloading flowtype
我想定义一个重载函数,如
function first(n?: number) {
if (number === undefined) {
// returns a single Item
return items[0];
}
// returns an array of Item
return items.slice(0, n);
}
Run Code Online (Sandbox Code Playgroud)
以便这些语句类型检查:
const item: Item = first(); // no args, so return type is Item
const items: Array<Item> = first(5); // number arg, so return type is Array<Item>
Run Code Online (Sandbox Code Playgroud)
flow 知道第一次调用first将导致n === undefined(因为如果undefined对 无效,它会抱怨n)并且它理解它将采用 if 分支,所以我认为它可以推断返回类型是Item,但一切我试过要么让任何事情通过,要么总是失败。
知道这是否可能吗?提前感谢互联网。
我没有给你一个完整的解决方案,但我已经做到了:
const items = [1, 2, 3];
type FirstType = ((_: void) => number) & ((n: number) => Array<number>);
const first: FirstType = (n?: number) => {
if (n === undefined) {
// returns a single Item
return (items[0]: any);
} else {
// returns an array of Item
return (items.slice(0, n): any);
}
}
const a: number = first();
const b: Array<number> = first(2);
Run Code Online (Sandbox Code Playgroud)
(尝试流程)
的&是交叉点型,并且这意味着first必须满足这两种这些类型的。您可以看到以first()您想要的方式进行类型检查的调用。
不幸的是,Flow 目前似乎无法对first. 请注意,我必须any强制转换返回值以转义类型检查器。如果您愿意在函数体中放弃类型检查,您至少可以在调用函数的地方得到它。
| 归档时间: |
|
| 查看次数: |
1073 次 |
| 最近记录: |