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

如何指定泛型函数的泛型实参以获取对应参数类型?

如何获取泛型静态方法指定泛型实参后的参数类型?

问题场景

现有如下TypeScript代码,希望在指定泛型实参Child的前提下,获取Foo.func方法的第一个参数类型:

class Model{
    id = 0;
    title = 'test';
}

class Child extends Model{
    child = true;
}

class Foo {
    static func<T extends Model>(a: Omit<T, 'id'>): number{
        return 0;
    }
}

// 目标:获取当T为Child时,func的第一个参数类型
type p = Parameters<typeof Foo['func']>[0] // 当前写法无法指定T为Child

解决方案

你可以直接为泛型函数类型指定具体的泛型实参,再通过Parameters工具类型提取参数类型:

// 写法1:分步定义
type FuncWithChild = typeof Foo['func']<Child>;
type p = Parameters<FuncWithChild>[0]; // 类型为 Omit<Child, 'id'>,即 { title: string; child: boolean; }

// 写法2:合并为一行
type p = Parameters<typeof Foo['func']<Child>>[0];

原理说明

typeof Foo['func']得到的是未绑定泛型参数的函数类型,此时Parameters提取的是泛型约束对应的参数类型(即Omit<T, 'id'>,其中T是未指定的泛型变量)。通过在函数类型后添加<Child>,我们将泛型参数T绑定为具体的Child类型,此时再用Parameters就能得到该特定场景下的参数类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:56:01