Skip to content

Commit 47c5cb8

Browse files
authored
🤖 Merge PR DefinitelyTyped#72540 fix(node/assert): refine the signature of CallTracker.calls() by @hkleungai
1 parent a43c0db commit 47c5cb8

File tree

6 files changed

+135
-3
lines changed

6 files changed

+135
-3
lines changed

‎types/node/assert.d.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@ declare module "assert" {
7979
* @return A function that wraps `fn`.
8080
*/
8181
calls(exact?: number): () => void;
82-
calls<Func extends (...args: any[]) => any>(fn?: Func, exact?: number): Func;
82+
calls(fn: undefined, exact?: number): () => void;
83+
calls<Func extends (...args: any[]) => any>(fn: Func, exact?: number): Func;
84+
calls<Func extends (...args: any[]) => any>(fn?: Func, exact?: number): Func | (() => void);
8385
/**
8486
* Example:
8587
*

‎types/node/test/assert.ts‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,48 @@ import assert = require("node:assert");
4545
}
4646
}
4747

48+
{
49+
const tracker = new assert.CallTracker();
50+
51+
let exact: number | undefined;
52+
53+
// $ExpectType () => void
54+
tracker.calls();
55+
// $ExpectType () => void
56+
tracker.calls(7);
57+
// $ExpectType () => void
58+
tracker.calls(exact);
59+
60+
// $ExpectType () => void
61+
tracker.calls(undefined);
62+
// $ExpectType () => void
63+
tracker.calls(undefined, undefined);
64+
// $ExpectType () => void
65+
tracker.calls(undefined, 7);
66+
// $ExpectType () => void
67+
tracker.calls(undefined, exact);
68+
69+
let f1: (a: number) => number = () => 3;
70+
// $ExpectType (a: number) => number
71+
tracker.calls(f1);
72+
// $ExpectType (a: number) => number
73+
tracker.calls(f1, undefined);
74+
// $ExpectType (a: number) => number
75+
tracker.calls(f1, 42);
76+
// $ExpectType (a: number) => number
77+
tracker.calls(f1, exact);
78+
79+
let f2: ((a: number) => number) | undefined;
80+
// $ExpectType ((a: number) => number) | (() => void)
81+
tracker.calls(f2);
82+
// $ExpectType ((a: number) => number) | (() => void)
83+
tracker.calls(f2, undefined);
84+
// $ExpectType ((a: number) => number) | (() => void)
85+
tracker.calls(f2, 42);
86+
// $ExpectType ((a: number) => number) | (() => void)
87+
tracker.calls(f2, exact);
88+
}
89+
4890
assert(1 + 1 - 2 === 0, "The universe isn't how it should.");
4991

5092
assert.deepEqual({ x: { y: 3 } }, { x: { y: 3 } }, "DEEP WENT DERP");

‎types/node/v18/assert.d.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@ declare module "assert" {
6464
* @return that wraps `fn`.
6565
*/
6666
calls(exact?: number): () => void;
67-
calls<Func extends (...args: any[]) => any>(fn?: Func, exact?: number): Func;
67+
calls(fn: undefined, exact?: number): () => void;
68+
calls<Func extends (...args: any[]) => any>(fn: Func, exact?: number): Func;
69+
calls<Func extends (...args: any[]) => any>(fn?: Func, exact?: number): Func | (() => void);
6870
/**
6971
* Example:
7072
*

‎types/node/v18/test/assert.ts‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,48 @@ import assert = require("node:assert");
4545
}
4646
}
4747

48+
{
49+
const tracker = new assert.CallTracker();
50+
51+
let exact: number | undefined;
52+
53+
// $ExpectType () => void
54+
tracker.calls();
55+
// $ExpectType () => void
56+
tracker.calls(7);
57+
// $ExpectType () => void
58+
tracker.calls(exact);
59+
60+
// $ExpectType () => void
61+
tracker.calls(undefined);
62+
// $ExpectType () => void
63+
tracker.calls(undefined, undefined);
64+
// $ExpectType () => void
65+
tracker.calls(undefined, 7);
66+
// $ExpectType () => void
67+
tracker.calls(undefined, exact);
68+
69+
let f1: (a: number) => number = () => 3;
70+
// $ExpectType (a: number) => number
71+
tracker.calls(f1);
72+
// $ExpectType (a: number) => number
73+
tracker.calls(f1, undefined);
74+
// $ExpectType (a: number) => number
75+
tracker.calls(f1, 42);
76+
// $ExpectType (a: number) => number
77+
tracker.calls(f1, exact);
78+
79+
let f2: ((a: number) => number) | undefined;
80+
// $ExpectType ((a: number) => number) | (() => void)
81+
tracker.calls(f2);
82+
// $ExpectType ((a: number) => number) | (() => void)
83+
tracker.calls(f2, undefined);
84+
// $ExpectType ((a: number) => number) | (() => void)
85+
tracker.calls(f2, 42);
86+
// $ExpectType ((a: number) => number) | (() => void)
87+
tracker.calls(f2, exact);
88+
}
89+
4890
assert(1 + 1 - 2 === 0, "The universe isn't how it should.");
4991

5092
assert.deepEqual({ x: { y: 3 } }, { x: { y: 3 } }, "DEEP WENT DERP");

‎types/node/v20/assert.d.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@ declare module "assert" {
7979
* @return A function that wraps `fn`.
8080
*/
8181
calls(exact?: number): () => void;
82-
calls<Func extends (...args: any[]) => any>(fn?: Func, exact?: number): Func;
82+
calls(fn: undefined, exact?: number): () => void;
83+
calls<Func extends (...args: any[]) => any>(fn: Func, exact?: number): Func;
84+
calls<Func extends (...args: any[]) => any>(fn?: Func, exact?: number): Func | (() => void);
8385
/**
8486
* Example:
8587
*

‎types/node/v20/test/assert.ts‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,48 @@ import assert = require("node:assert");
4545
}
4646
}
4747

48+
{
49+
const tracker = new assert.CallTracker();
50+
51+
let exact: number | undefined;
52+
53+
// $ExpectType () => void
54+
tracker.calls();
55+
// $ExpectType () => void
56+
tracker.calls(7);
57+
// $ExpectType () => void
58+
tracker.calls(exact);
59+
60+
// $ExpectType () => void
61+
tracker.calls(undefined);
62+
// $ExpectType () => void
63+
tracker.calls(undefined, undefined);
64+
// $ExpectType () => void
65+
tracker.calls(undefined, 7);
66+
// $ExpectType () => void
67+
tracker.calls(undefined, exact);
68+
69+
let f1: (a: number) => number = () => 3;
70+
// $ExpectType (a: number) => number
71+
tracker.calls(f1);
72+
// $ExpectType (a: number) => number
73+
tracker.calls(f1, undefined);
74+
// $ExpectType (a: number) => number
75+
tracker.calls(f1, 42);
76+
// $ExpectType (a: number) => number
77+
tracker.calls(f1, exact);
78+
79+
let f2: ((a: number) => number) | undefined;
80+
// $ExpectType ((a: number) => number) | (() => void)
81+
tracker.calls(f2);
82+
// $ExpectType ((a: number) => number) | (() => void)
83+
tracker.calls(f2, undefined);
84+
// $ExpectType ((a: number) => number) | (() => void)
85+
tracker.calls(f2, 42);
86+
// $ExpectType ((a: number) => number) | (() => void)
87+
tracker.calls(f2, exact);
88+
}
89+
4890
assert(1 + 1 - 2 === 0, "The universe isn't how it should.");
4991

5092
assert.deepEqual({ x: { y: 3 } }, { x: { y: 3 } }, "DEEP WENT DERP");

0 commit comments

Comments
 (0)