diff --git a/packages/client/src/components/MkPagination.vue b/packages/client/src/components/MkPagination.vue
index aee1fffbe3..dc3721a1c6 100644
--- a/packages/client/src/components/MkPagination.vue
+++ b/packages/client/src/components/MkPagination.vue
@@ -66,7 +66,7 @@
 	</transition>
 </template>
 
-<script lang="ts" setup generic="E extends keyof Endpoints">
+<script lang="ts" setup generic="E extends PagingKey">
 import type { ComputedRef } from "vue";
 import { computed, isRef, onActivated, onDeactivated, ref, watch } from "vue";
 import type { Endpoints, TypeUtils } from "firefish-js";
@@ -81,7 +81,10 @@ import MkButton from "@/components/MkButton.vue";
 import { i18n } from "@/i18n";
 import { defaultStore } from "@/store";
 
-export interface Paging<E extends keyof Endpoints = keyof Endpoints> {
+// biome-ignore lint/suspicious/noExplicitAny: 
+export type PagingKey = TypeUtils.EndpointsOf<any[]>;
+
+export interface Paging<E extends PagingKey = PagingKey> {
 	endpoint: E;
 	limit: number;
 	params?: Endpoints[E]["req"] | ComputedRef<Endpoints[E]["req"]>;
@@ -117,14 +120,15 @@ const props = withDefaults(
 
 const slots = defineSlots<{
 	default(props: { items: Item[] }): unknown;
-	empty(props: null): never;
+	empty(props: Record<string, never>): never;
 }>();
 
 const emit = defineEmits<{
 	(ev: "queue", count: number): void;
-	(ev: "status", error: boolean): void;
+	(ev: "status", hasError: boolean): void;
 }>();
 
+type Param = Endpoints[E]["req"] | Record<string, never>;
 type Item = Endpoints[E]["res"][number];
 
 const rootEl = ref<HTMLElement>();
@@ -142,8 +146,9 @@ const error = ref(false);
 const init = async (): Promise<void> => {
 	queue.value = [];
 	fetching.value = true;
+	
 	const params = props.pagination.params
-		? isRef(props.pagination.params)
+		? isRef<Param>(props.pagination.params)
 			? props.pagination.params.value
 			: props.pagination.params
 		: {};
@@ -155,7 +160,7 @@ const init = async (): Promise<void> => {
 				: (props.pagination.limit || 10) + 1,
 		})
 		.then(
-			(res) => {
+			(res: Item[]) => {
 				for (let i = 0; i < res.length; i++) {
 					const item = res[i];
 					if (props.pagination.reversed) {
@@ -179,7 +184,7 @@ const init = async (): Promise<void> => {
 				error.value = false;
 				fetching.value = false;
 			},
-			(err) => {
+			(_err) => {
 				error.value = true;
 				fetching.value = false;
 			},
@@ -193,7 +198,7 @@ const reload = (): Promise<void> => {
 
 const refresh = async (): Promise<void> => {
 	const params = props.pagination.params
-		? isRef(props.pagination.params)
+		? isRef<Param>(props.pagination.params)
 			? props.pagination.params.value
 			: props.pagination.params
 		: {};
@@ -204,7 +209,7 @@ const refresh = async (): Promise<void> => {
 			offset: 0,
 		})
 		.then(
-			(res) => {
+			(res: Item[]) => {
 				const ids = items.value.reduce(
 					(a, b) => {
 						a[b.id] = true;
@@ -215,7 +220,7 @@ const refresh = async (): Promise<void> => {
 
 				for (let i = 0; i < res.length; i++) {
 					const item = res[i];
-					if (!updateItem(item.id, (old) => item)) {
+					if (!updateItem(item.id, (_old) => item)) {
 						append(item);
 					}
 					delete ids[item.id];
@@ -225,7 +230,7 @@ const refresh = async (): Promise<void> => {
 					removeItem((i) => i.id === id);
 				}
 			},
-			(err) => {
+			(_err) => {
 				error.value = true;
 				fetching.value = false;
 			},
@@ -243,7 +248,7 @@ const fetchMore = async (): Promise<void> => {
 	moreFetching.value = true;
 	backed.value = true;
 	const params = props.pagination.params
-		? isRef(props.pagination.params)
+		? isRef<Param>(props.pagination.params)
 			? props.pagination.params.value
 			: props.pagination.params
 		: {};
@@ -264,7 +269,7 @@ const fetchMore = async (): Promise<void> => {
 						}),
 		})
 		.then(
-			(res) => {
+			(res: Item[]) => {
 				for (let i = 0; i < res.length; i++) {
 					const item = res[i];
 					if (props.pagination.reversed) {
@@ -288,7 +293,7 @@ const fetchMore = async (): Promise<void> => {
 				offset.value += res.length;
 				moreFetching.value = false;
 			},
-			(err) => {
+			(_err) => {
 				moreFetching.value = false;
 			},
 		);
@@ -304,7 +309,7 @@ const fetchMoreAhead = async (): Promise<void> => {
 		return;
 	moreFetching.value = true;
 	const params = props.pagination.params
-		? isRef(props.pagination.params)
+		? isRef<Param>(props.pagination.params)
 			? props.pagination.params.value
 			: props.pagination.params
 		: {};
@@ -325,7 +330,7 @@ const fetchMoreAhead = async (): Promise<void> => {
 						}),
 		})
 		.then(
-			(res) => {
+			(res: Item[]) => {
 				if (res.length > SECOND_FETCH_LIMIT) {
 					res.pop();
 					items.value = props.pagination.reversed
@@ -341,7 +346,7 @@ const fetchMoreAhead = async (): Promise<void> => {
 				offset.value += res.length;
 				moreFetching.value = false;
 			},
-			(err) => {
+			(_err) => {
 				moreFetching.value = false;
 			},
 		);
@@ -433,7 +438,7 @@ const updateItem = (id: Item["id"], replacer: (old: Item) => Item): boolean => {
 	return true;
 };
 
-if (props.pagination.params && isRef(props.pagination.params)) {
+if (props.pagination.params && isRef<Param>(props.pagination.params)) {
 	watch(props.pagination.params, init, { deep: true });
 }