recreating overload when passing a function as parameter with generic
- 主要語言
- 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 還沒有評估資料。