facebook / facebook/flow

recreating overload when passing a function as parameter with generic

Đang mở
#128 4 bình luận 0 reaction 0 người được giao Xem trên GitHub
wishlist
Ngôn ngữ chính
Rust
Star
22.3k
Fork
1.9k
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.