如何使用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
相关产品推荐
相关产品推荐

