facebook / facebook/flow

recreating overload when passing a function as parameter with generic

未關閉
#128 4 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
wishlist
主要語言
Rust
星號
22.3k
分支
1.9k
PR 合併指標
30 天內沒有已合併 PR

描述

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
```

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。