facebook / facebook/flow

recreating overload when passing a function as parameter with generic

Open
#128 4 comments 0 reactions 0 assignees View on GitHub
wishlist
Dominant language
Rust
Stars
22.3k
Forks
1.9k
PR merge metrics
No merged PRs in 30d

Description

let's look the first example:

``` typescript
declare var promisify :
((func: (callback: (err: any, result: R) => void) => void) =>
(() => Promise)) &
((func: (a: A, callback: (err: any, result: R) => void) => void) =>
((a:A) => Promise)) &
((func: (a: A, b: B, callback: (err: any, result: R) => void) => void) =>
((a:A, b: B) => Promise));

declare var readfile:
(path: string, callback: (err: any, result: string) => void) => void;

var promisifiedReadFile = promisify(readfile);
```

in this example everything works fine `promisifiedReadFile` has type :

``` typescript
(path: string) => Promise
```

(even if 'type-at-pos' display strange type information but that's another story).

If I change the declaration of `readfile` to :

``` typescript
declare var readfile:
(path: string, options: any, callback: (err: any, result: string) => void) => void &
(path: string, callback: (err: any, result: string) => void) => void;
```

`promisifiedReadFile` will have the type :

``` typescript
(path: string, options: any) => Promise
```

If I change again the declaration of readfile to :

``` typescript
declare var readfile:
(path: string, callback: (err: any, result: string) => void) => void &
(path: string, options: any, callback: (err: any, result: string) => void) => void;
```

`promisifiedReadFile` type will be again :

``` typescript
(path: string) => Promise
```

Firstly this is inconsistant, order in intersection type should not matter, then the desired behavior in both case would be to obtain the type

``` typescript
(path: string) => Promise &
(path: string, options: any) => Promise
```

or shorter:

``` typescript
(path: string, options?: any) => Promise
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.