diff --git a/packages/react-native/__typetests__/globals.tsx b/packages/react-native/__typetests__/globals.tsx index 831a67b7297..ec9be016416 100644 --- a/packages/react-native/__typetests__/globals.tsx +++ b/packages/react-native/__typetests__/globals.tsx @@ -137,6 +137,27 @@ function testRequestAnimationFrame(){ ); } +function testRequestIdleCallback() { + cancelIdleCallback(null); + cancelIdleCallback(undefined); + + let handle = requestIdleCallback(deadline => { + const didTimeout: boolean = deadline.didTimeout; + const remaining: number = deadline.timeRemaining(); + console.log(didTimeout, remaining); + }); + cancelIdleCallback(handle); + + handle = requestIdleCallback(noop, { timeout: 100 }); + cancelIdleCallback(handle); + + // @ts-expect-error + requestIdleCallback(noop, { timeout: 'wrong-type' }); + + // @ts-expect-error + cancelIdleCallback('wrong-type'); +} + const fetchCopy: WindowOrWorkerGlobalScope['fetch'] = fetch; const myHeaders = new Headers(); diff --git a/packages/react-native/src/types/globals.d.ts b/packages/react-native/src/types/globals.d.ts index 98f824c62b8..c5c9617fe02 100644 --- a/packages/react-native/src/types/globals.d.ts +++ b/packages/react-native/src/types/globals.d.ts @@ -125,6 +125,15 @@ declare global { function cancelAnimationFrame(handle: number | null | undefined): void; function requestAnimationFrame(callback: (time: number) => void): number; + function requestIdleCallback( + callback: (deadline: { + didTimeout: boolean; + timeRemaining: () => number; + }) => void, + options?: {timeout: number}, + ): number; + function cancelIdleCallback(handle: number | null | undefined): void; + function fetchBundle( bundleId: number, callback: (error?: Error | null) => void,