export type TaskPriority = "user-blocking" | "user-visible" | "background"; export interface SchedulerPostTaskOptions { delay?: number; priority?: TaskPriority; signal?: AbortSignal; } export interface SchedulerPostTaskCallback { (): PromiseLike | T; } export interface Scheduler { postTask(callback: SchedulerPostTaskCallback, options?: SchedulerPostTaskOptions): Promise; yield(): Promise; } export interface SchedulerConstructor { readonly prototype: Scheduler; } export interface TaskControllerInit { priority?: TaskPriority; } export interface TaskController extends AbortController { readonly signal: TaskSignal; setPriority(priority: TaskPriority): void; } export interface TaskControllerConstructor { readonly prototype: TaskController; new (init?: TaskControllerInit): TaskController; } export interface TaskSignalAnyInit { priority?: TaskPriority | TaskSignal; } export interface TaskSignal extends AbortSignal { onprioritychange: ((this: TaskSignal, event: TaskPriorityChangeEvent) => unknown) | null; readonly priority: TaskPriority; } export interface TaskSignalConstructor { readonly prototype: TaskSignal; any(signals: readonly AbortSignal[], init?: TaskSignalAnyInit): TaskSignal; } export interface TaskPriorityChangeEventInit extends EventInit { previousPriority: TaskPriority; } export interface TaskPriorityChangeEvent extends Event { readonly previousPriority: TaskPriority; } export interface TaskPriorityChangeEventConstructor { readonly prototype: TaskPriorityChangeEvent; new (type: string, init: TaskPriorityChangeEventInit): TaskPriorityChangeEvent; }