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

TypeScript中能否忽略无关的泛型类型参数?

如何省略未使用的泛型参数(第三方库类型)

我写了一个计算进度的函数,但里面的泛型参数T完全没用到,想把它删掉,结果直接删除后报错,提示Generic type 'JsonApiQueryData<T>' requires 1 type argument(s)。相关代码和类型定义如下:

我的函数:

function progress<T>(data: JsonApiQueryData<T>): number {
  const { links, meta } = data.getMeta();
  if (!links.next) {
    return 1;
  }

  const url = new URL(links.next);
  return parseInt(url.searchParams.get('page[offset]')) / meta.total;
}

第三方库的JsonApiQueryData定义:

export declare class JsonApiQueryData<T> {
    protected jsonApiModels: Array<T>;
    protected metaData: any;
    constructor(jsonApiModels: Array<T>, metaData?: any);
    getModels(): T[];
    getMeta(): any;
}

注意:我没办法修改这个第三方库的类型,所以需要在不改动它的前提下解决问题。


可行解决方案

1. 直接用unknown填充泛型参数

既然函数逻辑完全不依赖T的具体类型,给JsonApiQueryData传unknown就能满足类型要求,同时不用声明多余的泛型参数:

function progress(data: JsonApiQueryData<unknown>): number {
  const { links, meta } = data.getMeta();
  if (!links.next) {
    return 1;
  }

  const url = new URL(links.next);
  return parseInt(url.searchParams.get('page[offset]')) / meta.total;
}

2. 定义非泛型类型别名(简化写法)

如果觉得每次写JsonApiQueryData<unknown>太繁琐,可以提前定义一个类型别名:

type JsonApiQueryDataAny = JsonApiQueryData<unknown>;

function progress(data: JsonApiQueryDataAny): number {
  // 函数逻辑和之前一样
}

3. 使用any(不推荐)

虽然any也能解决报错问题,但它会关闭类型检查,可能隐藏潜在问题,除非你确认完全不需要类型约束,否则不建议用:

function progress(data: JsonApiQueryData<any>): number {
  // 函数逻辑不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:15:32