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

TypeScript:如何在类型内部函数定义泛型,而非顶层类型?

在TypeScript中为类型内部的函数单独定义泛型参数

你想要的是只为对象类型内部的单个函数属性定义泛型参数,而不是给整个顶层类型添加泛型,这种需求完全可以实现,你的初始写法语法有误,正确的方式是把泛型参数直接绑定到函数本身,而非属性的类型声明上。

错误写法分析

你尝试的代码里,在属性名后加<T>的语法是不合法的:

type MyFunc<T> = (functionParamm: T )=> void;
type Foo = {
    func1?<T>:  MyFunc<T> // 语法错误,不能在属性冒号前声明泛型
}

正确解决方案

直接在函数类型的定义中声明泛型参数,让函数本身成为泛型函数,而非依赖顶层类型的泛型:

方式1:直接在属性中定义泛型函数

type Foo = {
    // 泛型T仅属于func1这个函数
    func1?: <T>(functionParam: T) => void;
}

方式2:结合已有的函数类型定义

如果你想复用MyFunc的结构,可以调整MyFunc为一个泛型函数类型(而非带泛型参数的类型),或者直接在属性中使用它时,让函数本身携带泛型:

// 调整MyFunc为泛型函数类型的别名
type MyFunc = <T>(functionParam: T) => void;

type Foo = {
    func1?: MyFunc;
}

多泛型函数场景的优势

当你的Foo类型包含多个独立的泛型函数时,这种方式的优势会非常明显——每个函数可以拥有自己独立的泛型参数,互不干扰,也不需要给Foo定义一堆泛型参数:

type Foo = {
    func1?: <T>(param: T) => void;
    func2?: <U>(list: U[]) => U; // 独立的泛型U
    func3?: <K, V>(key: K, value: V) => [K, V]; // 多个泛型参数也支持
}

这种写法完全避免了你之前那种给Foo加默认泛型的弊端,每个函数的泛型都是独立的,不会互相绑定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:53:26