为何为函数参数指定类型时出现「期望1个参数,却传入6个」错误?
问题原因
你定义的handleLogin函数采用了对象解构语法作为参数,这意味着TypeScript会将整个参数视为1个符合HandleLoginParamTypes类型的对象,而非6个独立参数。所以当你传入6个单独值时,TypeScript会判定参数数量不匹配,抛出TS2554错误。
解决方案
有两种方式可以解决这个问题,根据你的调用习惯选择即可:
方案1:修改调用方式,传入对象参数
保持当前的函数和类型定义不变,调用时将6个参数打包成一个符合HandleLoginParamTypes的对象传入:
handleLogin({ e, navigate, link: "/login", data: { emailId, password }, setError, setLoading });
方案2:调整类型定义为元组,支持多独立参数
如果你希望保留“传入6个独立参数”的调用方式,需要将HandleLoginParamTypes改为元组类型,并配合剩余参数解构语法定义函数:
首先重新定义类型:
export type HandleLoginParamTypes = [ React.FormEvent<EventTarget>, NavigateFunction, string, LoginDataType, React.Dispatch<React.SetStateAction<string>>, React.Dispatch<React.SetStateAction<boolean>> ];
然后修改函数定义:
const handleLogin = async ( ...[e, navigate, link, data, setError, setLoading]: HandleLoginParamTypes ) => { // function code };
这样调用时传入6个独立参数就完全符合类型要求了。
内容的提问来源于stack exchange,提问作者Pawan
相关产品推荐
相关产品推荐

