recreating overload when passing a function as parameter with generic
- 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
Đánh giá
Issue này chưa được đánh giá.