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
相关产品推荐
相关产品推荐

