Skip to content

Instantly share code, notes, and snippets.

@arackaf
Created May 12, 2026 04:10
Show Gist options
  • Select an option

  • Save arackaf/b3e3d45aa2306a1ac0498ba25cb6d991 to your computer and use it in GitHub Desktop.

Select an option

Save arackaf/b3e3d45aa2306a1ac0498ba25cb6d991 to your computer and use it in GitHub Desktop.
ArgsDemo.ts
import { Expect, TypesMatch } from "../util/test-utils";
type LoadingPacket<Args extends unknown[]> = {
load: (...args: Args) => Promise<unknown>;
getPrefetchArgs: (cookies: Record<string, unknown>) => [...Args];
getPrefetchUrl: (...args: Args) => string;
};
function createPrefetchLoader<Args extends unknown[]>(
packet: LoadingPacket<Args>
): LoadingPacket<Args> {
return null as any;
}
const loader = createPrefetchLoader({
load(page: number, search: string) {
return fetch(`/some/endpoint?page=${page}&search=${search}`);
},
getPrefetchArgs(cookies: Record<string, unknown>) {
const page: number = (cookies.page as number) || 1;
const search: string = (cookies.search as string) || "";
return [page, search];
},
getPrefetchUrl(page: number, search: string) {
return `/some/endpoint?page=${page}&search=${search}`;
},
});
type Tests = [
Expect<TypesMatch<Parameters<typeof loader.load>, [number, string]>>
];
loader.load(1, "Hello");
// @ts-expect-error
loader.load(1);
// @ts-expect-error
loader.load(1, "Hello", null as any);
export {};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment