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

TypeScript泛型函数报错:SanitizeFunction非泛型问题咨询

问题原因与解决方案

你定义的SanitizeFunction是一个泛型函数类型,而非泛型类型。前者的泛型参数<T>属于函数本身(调用函数时指定T),而不是类型本身的参数。所以当你尝试用SanitizeFunction<Animal>给变量赋值时,TypeScript会报错——因为这个类型本身不接受泛型参数。

修复方案

把SanitizeFunction改成泛型类型,让它接受T作为类型参数,返回对应类型的函数:

// 调整为泛型类型,T作为类型参数传入
type SanitizeFunction<T extends object = {}> = (obj: object) => T;

const sanitizeAnimal: SanitizeFunction<Animal> = (obj) => ({...obj} as Animal);

原写法的本质

你最初的代码定义的是一个“可以处理任意T类型的泛型函数”,适合这样使用:

type SanitizeFunction = <T extends object = {}>(obj: object) => T;
const sanitize: SanitizeFunction = (obj) => ({...obj} as any);

// 调用时指定T类型
const animal = sanitize<Animal>(someObj);

但你的需求是创建一个固定处理Animal类型的函数,所以需要把泛型参数提升到类型层面,而不是函数层面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:42:00