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

TypeScript:传递泛型类型的工厂函数正确实现方法

正确实现泛型工厂函数的方案

你的代码报错核心原因是**fooFn<T>的定义存在泛型冲突**:你在fooFn<T>内部又声明了一个同名的泛型参数<T>,这个内部的T和工厂函数generator的泛型T是完全独立的两个类型参数,导致TypeScript无法识别它们的关联,从而抛出类型不兼容的错误。

正确实现方式

只需要修改fooFn的类型定义,去掉函数本身的泛型声明,让它成为一个固定接受T类型参数并返回T类型的函数类型即可:

// 定义接受T类型参数、返回T类型的函数类型
type fooFn<T> = (t: T) => T;

const generator = <T>(): fooFn<T> => {
  return (t: T): T => {
    console.log(t);
    return t;
  };
};

const foo = generator<number>();
foo(1);  // 正常编译通过
foo('test'); // 编译报错:类型“string”的参数不能赋给类型“number”的参数

更简洁的写法(省略显式类型定义)

如果不需要单独复用fooFn类型,可以直接让TypeScript自动推断返回的函数类型,代码更简洁:

const generator = <T>() => {
  return (t: T): T => {
    console.log(t);
    return t;
  };
};

const foo = generator<number>();
foo(1);  // 正常编译
foo('test'); // 编译报错

这两种写法都能实现你的需求:通过工厂函数指定泛型类型后,生成的函数会严格校验参数类型,传入错误类型时TypeScript会准确抛出编译错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:15:48