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
相关产品推荐
相关产品推荐

