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

如何声明属于泛型通用类型的泛型函数?

如何声明属于泛型通用类型的泛型函数?

嘿,我完全懂你碰到的这个语法问题——你已经定义了一个泛型的通用函数类型,现在想把另一个泛型函数归到这个类型底下对吧?咱们先把你给出的通用类型再明确一下:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:25:30