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

如何使用TypeScript的infer推断无返回值函数返回类型?写法是否正确?

关于TypeScript中infer关键字的使用验证

你当前的写法不是正确使用infer的示例,问题出在以下几点:

  • 泛型T没有任何约束,也没有在函数的参数或实现中被使用,TypeScript无法确定T的具体类型,导致CallbackType<T>的推断完全失效。调用stateCallback时T可以被指定为任意类型,完全不符合你想要推断返回类型的需求。
  • CallbackType<T>的设计是用来提取无参函数类型T的返回值,但你的stateCallback本身并不是接收函数参数的函数,也不需要通过泛型T关联到某个函数类型,这个类型工具在这里用错了场景。

正确的infer使用场景示例

如果想学习infer提取函数返回类型的正确用法,应该针对具体的函数类型做推断,比如:

// 类型工具:提取任意函数类型的返回值
type ExtractReturnType<T> = T extends (...args: any[]) => infer R ? R : never;

// 示例函数
const getStringLength = (str: string): number => str.length;

// 推断getStringLength的返回类型为number
type LengthReturnType = ExtractReturnType<typeof getStringLength>; // type LengthReturnType = number

你的代码修复方式

回到你的需求:stateCallback没有返回值,TypeScript会自动推断其返回类型为void,完全不需要使用infer。修复后的代码如下:

const [name, setName] = useState<string>('');
const [age, setAge] = useState<number>();

function stateCallback(name: string, age: number) {
  setName(name);
  setAge(age);
}
// 此时stateCallback的返回类型自动为void

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:26:09