diff --git a/baselines/dom.generated.d.ts b/baselines/dom.generated.d.ts index b9bd67fc5..7b4ddefbb 100644 --- a/baselines/dom.generated.d.ts +++ b/baselines/dom.generated.d.ts @@ -35284,7 +35284,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -43919,8 +43919,8 @@ interface ResizeObserverCallback { (entries: ResizeObserverEntry[], observer: ResizeObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/serviceworker.generated.d.ts b/baselines/serviceworker.generated.d.ts index 56359a693..bf2af6371 100644 --- a/baselines/serviceworker.generated.d.ts +++ b/baselines/serviceworker.generated.d.ts @@ -8558,7 +8558,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -13349,8 +13349,8 @@ interface ReportingObserverCallback { (reports: Report[], observer: ReportingObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/sharedworker.generated.d.ts b/baselines/sharedworker.generated.d.ts index 6db80ae55..0aa57c3f9 100644 --- a/baselines/sharedworker.generated.d.ts +++ b/baselines/sharedworker.generated.d.ts @@ -8141,7 +8141,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -13075,8 +13075,8 @@ interface ReportingObserverCallback { (reports: Report[], observer: ReportingObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/ts5.5/dom.generated.d.ts b/baselines/ts5.5/dom.generated.d.ts index e34301255..408304b71 100644 --- a/baselines/ts5.5/dom.generated.d.ts +++ b/baselines/ts5.5/dom.generated.d.ts @@ -35259,7 +35259,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -43893,8 +43893,8 @@ interface ResizeObserverCallback { (entries: ResizeObserverEntry[], observer: ResizeObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/ts5.5/serviceworker.generated.d.ts b/baselines/ts5.5/serviceworker.generated.d.ts index 19ecf148c..fe5c41d15 100644 --- a/baselines/ts5.5/serviceworker.generated.d.ts +++ b/baselines/ts5.5/serviceworker.generated.d.ts @@ -8555,7 +8555,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -13346,8 +13346,8 @@ interface ReportingObserverCallback { (reports: Report[], observer: ReportingObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/ts5.5/sharedworker.generated.d.ts b/baselines/ts5.5/sharedworker.generated.d.ts index c417dc5a0..812fb3da4 100644 --- a/baselines/ts5.5/sharedworker.generated.d.ts +++ b/baselines/ts5.5/sharedworker.generated.d.ts @@ -8138,7 +8138,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -13072,8 +13072,8 @@ interface ReportingObserverCallback { (reports: Report[], observer: ReportingObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/ts5.5/webworker.generated.d.ts b/baselines/ts5.5/webworker.generated.d.ts index 66053df45..4379bc659 100644 --- a/baselines/ts5.5/webworker.generated.d.ts +++ b/baselines/ts5.5/webworker.generated.d.ts @@ -9706,7 +9706,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -15172,8 +15172,8 @@ interface ReportingObserverCallback { (reports: Report[], observer: ReportingObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/ts5.6/dom.generated.d.ts b/baselines/ts5.6/dom.generated.d.ts index a22d318bc..2b83c354c 100644 --- a/baselines/ts5.6/dom.generated.d.ts +++ b/baselines/ts5.6/dom.generated.d.ts @@ -35281,7 +35281,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -43916,8 +43916,8 @@ interface ResizeObserverCallback { (entries: ResizeObserverEntry[], observer: ResizeObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/ts5.6/serviceworker.generated.d.ts b/baselines/ts5.6/serviceworker.generated.d.ts index 19ecf148c..fe5c41d15 100644 --- a/baselines/ts5.6/serviceworker.generated.d.ts +++ b/baselines/ts5.6/serviceworker.generated.d.ts @@ -8555,7 +8555,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -13346,8 +13346,8 @@ interface ReportingObserverCallback { (reports: Report[], observer: ReportingObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/ts5.6/sharedworker.generated.d.ts b/baselines/ts5.6/sharedworker.generated.d.ts index c417dc5a0..812fb3da4 100644 --- a/baselines/ts5.6/sharedworker.generated.d.ts +++ b/baselines/ts5.6/sharedworker.generated.d.ts @@ -8138,7 +8138,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -13072,8 +13072,8 @@ interface ReportingObserverCallback { (reports: Report[], observer: ReportingObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/ts5.6/webworker.generated.d.ts b/baselines/ts5.6/webworker.generated.d.ts index 66053df45..4379bc659 100644 --- a/baselines/ts5.6/webworker.generated.d.ts +++ b/baselines/ts5.6/webworker.generated.d.ts @@ -9706,7 +9706,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -15172,8 +15172,8 @@ interface ReportingObserverCallback { (reports: Report[], observer: ReportingObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/ts5.9/dom.generated.d.ts b/baselines/ts5.9/dom.generated.d.ts index e63d5bfbb..8c3c61b95 100644 --- a/baselines/ts5.9/dom.generated.d.ts +++ b/baselines/ts5.9/dom.generated.d.ts @@ -35281,7 +35281,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -43916,8 +43916,8 @@ interface ResizeObserverCallback { (entries: ResizeObserverEntry[], observer: ResizeObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/ts5.9/serviceworker.generated.d.ts b/baselines/ts5.9/serviceworker.generated.d.ts index b9940a22d..01e6d5359 100644 --- a/baselines/ts5.9/serviceworker.generated.d.ts +++ b/baselines/ts5.9/serviceworker.generated.d.ts @@ -8555,7 +8555,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -13346,8 +13346,8 @@ interface ReportingObserverCallback { (reports: Report[], observer: ReportingObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/ts5.9/sharedworker.generated.d.ts b/baselines/ts5.9/sharedworker.generated.d.ts index 03574cee1..3feb5ab32 100644 --- a/baselines/ts5.9/sharedworker.generated.d.ts +++ b/baselines/ts5.9/sharedworker.generated.d.ts @@ -8138,7 +8138,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -13072,8 +13072,8 @@ interface ReportingObserverCallback { (reports: Report[], observer: ReportingObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/ts5.9/webworker.generated.d.ts b/baselines/ts5.9/webworker.generated.d.ts index 8d4b90af9..ad8845d32 100644 --- a/baselines/ts5.9/webworker.generated.d.ts +++ b/baselines/ts5.9/webworker.generated.d.ts @@ -9706,7 +9706,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -15172,8 +15172,8 @@ interface ReportingObserverCallback { (reports: Report[], observer: ReportingObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/baselines/webworker.generated.d.ts b/baselines/webworker.generated.d.ts index a9cdc506c..d83899699 100644 --- a/baselines/webworker.generated.d.ts +++ b/baselines/webworker.generated.d.ts @@ -9709,7 +9709,7 @@ interface Scheduler { * * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Scheduler/postTask) */ - postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; + postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; /** * The **`yield()`** method of the Scheduler interface is used for yielding to the main thread during a task and continuing execution later, with the continuation scheduled as a prioritized task (see the Prioritized Task Scheduling API for more information). This allows long-running work to be broken up so the browser stays responsive. * @@ -15175,8 +15175,8 @@ interface ReportingObserverCallback { (reports: Report[], observer: ReportingObserver): void; } -interface SchedulerPostTaskCallback { - (): any; +interface SchedulerPostTaskCallback { + (): T | PromiseLike; } interface TransformerFlushCallback { diff --git a/inputfiles/overridingTypes.jsonc b/inputfiles/overridingTypes.jsonc index b20f538ba..dd140e04c 100644 --- a/inputfiles/overridingTypes.jsonc +++ b/inputfiles/overridingTypes.jsonc @@ -124,6 +124,19 @@ } } }, + "SchedulerPostTaskCallback": { + "typeParameters": [ + { + "name": "T", + "default": "any" + } + ], + "signature": { + "0": { + "overrideType": "T | PromiseLike" + } + } + }, "UnderlyingSourceStartCallback": { "typeParameters": [ { @@ -1891,6 +1904,31 @@ ] } }, + "Scheduler": { + "methods": { + "method": { + "postTask": { + "signature": { + "0": { + "typeParameters": [ + { + "name": "T", + "default": "any" + } + ], + "param": [ + { + "name": "callback", + "overrideType": "SchedulerPostTaskCallback" + } + ], + "overrideType": "Promise" + } + } + } + } + } + }, "MessagePort": { "methods": { "method": { diff --git a/unittests/files/schedulerPostTask.ts b/unittests/files/schedulerPostTask.ts new file mode 100644 index 000000000..da320e638 --- /dev/null +++ b/unittests/files/schedulerPostTask.ts @@ -0,0 +1,26 @@ +function assertType(_x: T) {} + +type Equals = + (() => T extends A ? 1 : 2) extends () => T extends B ? 1 : 2 + ? true + : false; +declare function assertExact(): void; + +async function testSchedulerPostTask() { + const num = await scheduler.postTask(() => 42); + assertExact>(); + + const str = await scheduler.postTask(async () => "done", { + priority: "background", + }); + assertExact>(); + + const nothing = await scheduler.postTask(() => {}); + assertExact>(); + + // @ts-expect-error The result is a number, not a string. + assertType(await scheduler.postTask(() => 42)); + + // An explicit `any` type argument keeps the previous behavior. + assertType>(scheduler.postTask(() => 1)); +}