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

TypeScript拆分泛型函数的类型定义与赋值时无法识别泛型T如何解决

错误原因

你在类型别名IFetchData上声明的泛型参数<T>属于调用级泛型,需要在函数被调用时由使用者传入具体类型。但你实现fetchData2时没有在函数定义处声明对应的泛型形参,导致函数内部作用域无法识别T这个类型标识,才抛出找不到名称的错误。

解决方案

根据你的使用场景,可以选择以下两种写法:

方案1:保留泛型函数特性(调用时指定类型)

如果需要同一个函数支持调用时传入不同泛型返回不同类型的结果,在函数实现处补充声明泛型参数即可:

type IFetchData = <T>() => T[]

// 实现函数时同步声明泛型<T>
const fetchData2: IFetchData = <T>() => {
  const arr: T[] = []
  // 符合条件时向数组推送元素
  return arr
}

// 调用时传入具体类型,正常返回string[]
const emptyStringArray = fetchData2<string>();

方案2:类型定义时固定泛型(定义时指定类型)

如果不同返回类型的函数需要单独定义,可以把泛型参数绑定到类型别名本身,使用类型时就指定具体类型:

// 泛型<T>声明在类型别名上,使用类型时需要指定具体类型
type IFetchData<T> = () => T[]

// 定义函数时就绑定泛型为string,该函数只能返回string数组
const fetchStringData: IFetchData<string> = () => {
  const arr: string[] = []
  // 业务逻辑
  return arr
}

// 调用时不需要再传泛型,直接返回string[]
const emptyStringArray = fetchStringData()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:06:04