为函数参数指定泛型类型后调用报错:Type unknown无调用签名
问题解决:TypeScript泛型函数调用报错 "This expression is not callable. Type unknown has no call signature"
你遇到的问题出在泛型T没有类型约束上:定义fun函数时,泛型T没有任何限制,TypeScript会把参数x的类型推断为unknown,而unknown类型的值不允许直接调用,所以触发了报错。
只需要给泛型T加上函数类型的约束,明确它是一个可以调用且返回值能和字符串拼接的函数即可,修正后的代码如下:
function a() { return 'abc' } // 约束T为返回字符串的函数类型 function fun<T extends () => string>(x: T, y: string) { return x() + y; } fun(a, "str") // 正常运行,返回结果为"abcstr"
如果你的函数可能返回其他可以和字符串拼接的类型(比如数字),可以把约束调整得更灵活:
// 允许返回字符串或数字类型的函数 function fun<T extends () => string | number>(x: T, y: string) { return x() + y; }
内容的提问来源于stack exchange,提问作者Faizan Ali
相关产品推荐
相关产品推荐

