Skip to content

Commit 129e0be

Browse files
authored
[minor] Merge pull request #1409 from nulladdict/flow-inference
[Typescript] Improving flow typings #1378
2 parents ab92f00 + 1ab7ef5 commit 129e0be

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

packages/mobx-state-tree/__tests__/core/async.test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ test("flow typings", async () => {
329329
numberToNumber: flow(function*(val: number) {
330330
yield promise
331331
return val
332-
}), // should be () => Promise<Promise<number>>
332+
}), // should be () => Promise<number>
333333
voidToNumber: flow(function*() {
334334
yield promise
335335
return Promise.resolve(2)
@@ -345,4 +345,8 @@ test("flow typings", async () => {
345345
expect(b).toBe(4)
346346
const c: number = await m.voidToNumber()
347347
expect(c).toBe(2)
348+
await m.voidToNumber().then(d => {
349+
const _d: number = d
350+
expect(_d).toBe(2)
351+
})
348352
})

packages/mobx-state-tree/src/core/flow.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1+
/**
2+
* @hidden
3+
*/
4+
export type FlowReturn<R> = R extends Promise<infer T> ? T : R
5+
16
/**
27
* See [asynchronous actions](https://github.com/mobxjs/mobx-state-tree/blob/master/docs/async-actions.md).
38
*
49
* @returns The flow as a promise.
510
*/
611
export function flow<R, Args extends any[]>(
7-
generator: (...args: Args) => Generator<any, R, any>
8-
): (...args: Args) => Promise<R> {
12+
generator: (...args: Args) => Generator<Promise<any>, R, any>
13+
): (...args: Args) => Promise<FlowReturn<R>> {
914
return createFlowSpawner(generator.name, generator) as any
1015
}
1116

0 commit comments

Comments
 (0)