如何声明属于泛型通用类型的泛型函数?
如何声明属于泛型通用类型的泛型函数?
嘿,我完全懂你碰到的这个语法问题——你已经定义了一个泛型的通用函数类型,现在想把另一个泛型函数归到这个类型底下对吧?咱们先把你给出的通用类型再明确一下:
interface GeneralFunction<T> { (props: T): void }
要声明泛型函数f<X>属于GeneralFunction<X>类型,其实有几种直观的写法,我给你拆解下:
方式一:直接对齐接口的泛型签名
最直接的就是写出和GeneralFunction<T>结构完全匹配的泛型函数签名,让TypeScript自动验证兼容性:
// 声明f是一个泛型函数,每个X类型的参数都符合GeneralFunction<X>的要求 const f: <X>(props: X) => void = (props) => { // 这里写你的函数逻辑,比如打印参数 console.log(`接收到参数:`, props); };
方式二:用接口直接约束函数
如果你想严格绑定到GeneralFunction这个接口,也可以通过泛型参数的覆盖来实现:
// 先定义好通用接口 interface GeneralFunction<T> { (props: T): void } // 声明f为泛型函数,同时让它符合GeneralFunction的结构 const f: GeneralFunction<unknown> = <X>(props: X) => { console.log(props); };
这里用unknown作为接口的泛型参数,是因为我们的函数f可以接受任意类型的X,unknown是最宽泛的顶层类型,能覆盖所有可能的X取值。
额外场景:类中的写法
如果是在类里声明这类泛型函数,写法也类似:
interface GeneralFunction<T> { (props: T): void } class Demo { // 在类属性里声明泛型函数类型 f: <X>(props: X) => void; constructor() { this.f = (props) => { console.log(`类中的函数接收到:`, props); }; } }
其实核心逻辑就是:你的GeneralFunction<T>是一个针对特定T类型的函数类型,而泛型函数f<X>则是对任意X类型都能生成符合GeneralFunction<X>的函数,只要保证函数的参数和返回值结构和接口对齐就行~
备注:内容来源于stack exchange,提问作者striderhobbit
相关产品推荐
相关产品推荐

