You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为TypeScript泛型函数绑定参数同时指定泛型类型

解决方案

报错原因

  • TS7019:剩余参数args没有显式声明类型,TypeScript 默认推断为any[],严格模式下会触发隐式any报错
  • TS2556:any[]类型不符合retrieve函数的入参要求,TypeScript 无法确认参数数量、类型与原函数匹配

方案1:直接提取参数类型(单次使用场景)

用TypeScript内置的Parameters工具类型结合条件类型推断,自动提取retrieve函数除第一个参数外的剩余参数类型,无需手动编写参数定义:

type User = { username: string; /* 其他用户字段 */ };
// 自动提取retrieve除第一个endpoint参数外的所有入参类型
type RetrieveParamsWithoutEndpoint = Parameters<typeof retrieve> extends [string, ...infer Rest] ? Rest : never;

const retrieveUser = (...args: RetrieveParamsWithoutEndpoint) => retrieve<User>("/user", ...args);

后续retrieve的入参规则修改时,retrieveUser的参数类型会自动同步更新,无需手动维护。


方案2:高阶工厂函数(多接口复用场景)

如果需要创建多个不同endpoint的请求方法,可以封装通用的创建函数,一次性解决类型推断问题,复用性更高:

// 通用retriever创建工厂
function createRetriever<T>(endpoint: string) {
  type RestParams = Parameters<typeof retrieve> extends [string, ...infer Rest] ? Rest : never;
  return (...args: RestParams) => retrieve<T>(endpoint, ...args);
}

// 新增接口时仅需一行代码就能生成类型安全的请求方法
type User = { username: string };
const retrieveUser = createRetriever<User>("/user");

type Article = { id: string; title: string };
const retrieveArticle = createRetriever<Article>("/article");

内容的提问来源于stack exchange,提问作者malobre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:45:05