Skip to content

Commit 9b71d32

Browse files
authored
make setTimeout/setInterval args generic to actually typecheck them (#2741)
- closes #2733
1 parent 2718e8c commit 9b71d32

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

packages/adapter/src/lib/_Types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ export interface InternalGetEncryptedConfigOptions {
343343
callback?: GetEncryptedConfigCallback;
344344
}
345345

346-
export type TimeoutCallback = (args?: any[]) => void;
346+
export type TimeoutCallback = (...args: any[]) => void;
347347

348348
export interface InternalSetObjectOptions {
349349
id: string;

packages/adapter/src/lib/adapter/adapter.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2598,7 +2598,11 @@ export class AdapterClass extends EventEmitter {
25982598
}
25992599

26002600
// external signature
2601-
setTimeout(cb: TimeoutCallback, timeout: number, ...args: any[]): ioBroker.Timeout | undefined;
2601+
setTimeout<TCallback extends TimeoutCallback>(
2602+
cb: TCallback,
2603+
timeout: number,
2604+
...args: Parameters<TCallback>
2605+
): ioBroker.Timeout | undefined;
26022606
/**
26032607
* Same as setTimeout,
26042608
* but it clears the running timers during the unload process
@@ -2685,7 +2689,11 @@ export class AdapterClass extends EventEmitter {
26852689
}
26862690

26872691
// external signature
2688-
setInterval(cb: TimeoutCallback, timeout: number, ...args: any[]): ioBroker.Interval | undefined;
2692+
setInterval<TCallback extends TimeoutCallback>(
2693+
cb: TCallback,
2694+
timeout: number,
2695+
...args: Parameters<TCallback>
2696+
): ioBroker.Interval | undefined;
26892697

26902698
/**
26912699
* Same as setInterval

packages/types-public/index.test-d.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -688,6 +688,16 @@ if (typeof state.common.smartName === 'object' && state.common.smartName !== nul
688688
declare let enumObj: ioBroker.EnumObject;
689689
enumObj.common.members && enumObj.common.members.map(() => 1);
690690

691+
adapter.setInterval((_param1: number, _param2: string) => {}, 100, 100, '');
692+
// @ts-expect-error missing required parameter _param2
693+
adapter.setInterval((_param1: number, _param2: string) => {}, 100, 100);
694+
// @ts-expect-error wrong type of _param2
695+
adapter.setInterval((_param1: number, _param2: string) => {}, 100, 100, 1);
696+
adapter.setTimeout((_param1: number, _param2: string) => {}, 100, 100, '');
697+
// @ts-expect-error missing required parameter _param2
698+
adapter.setTimeout((_param1: number, _param2: string) => {}, 100, 100);
699+
// @ts-expect-error wrong type of _param2
700+
adapter.setTimeout((_param1: number, _param2: string) => {}, 100, 100, 1);
691701
// Adapter.clearTimeout and clearInterval are not compatible with the builtins
692702
adapter.clearTimeout(adapter.setTimeout(() => {}, 10));
693703
adapter.clearInterval(adapter.setInterval(() => {}, 10));

0 commit comments

Comments
 (0)