typescript 为什么在为函数参数赋值类型时会出现“期望1个参数,但得到6个”的错误?

fae0ux8s  于 2023-01-18  发布在  TypeScript
关注(0)|答案(1)|浏览(148)

我试图实现一个函数。这个函数有6个参数。我定义了一个类型,而不是单独地将类型分配给参数。
下面是类型:

export type HandleLoginParamTypes = {
    e: React.FormEvent<EventTarget>;
    navigate: NavigateFunction;
    link: string;
    data: LoginDataType;
    setError: React.Dispatch<React.SetStateAction<string>>;
    setLoading: React.Dispatch<React.SetStateAction<boolean>>;
};

下面是我如何为函数参数赋值的:

const handleLogin = async (
    {e,navigate, link,data,setError,setLoading}: HandleLoginParamTypes
) => {

    //function code

}

现在当我试着像这样调用这个函数时:

handleLogin(e, navigate, "/login", { emailId, password }, setError, setLoading)

我收到此错误:

TS2554: Expected 1 arguments, but got 6.

我不明白为什么6个参数都是一个参数,请指导。

aiazj4mn

aiazj4mn1#

你的函数签名使用了 parameter destructuring,它说:“这个函数有一个参数,一个HandleLoginParamTypes类型的对象;当函数被调用时,从一个对象参数中获取这六个属性的列表,并将它们作为参数提供。”但是调用它的代码并没有将这些属性作为单个参数传递给它,而是传递了六个离散的参数。
或者:
1.更新函数以接受六个参数(可能不是一个好主意,太容易在参数列表中丢失),

1.更新调用以提供单个对象,并将e等作为该对象的属性。
下面是第二条:

handleLogin({e, navigate, link: "/login", data: { emailId, password }, setError, setLoading});
// −−−−−−−−−^−−−−−−−−−−−−−^^^^^−−−−−−−−−−−^^^^^−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^

或者,由于该行有点长:

handleLogin({
    e,
    navigate,
    link: "/login",
    data: { emailId, password },
    setError,
    setLoading
});

相关问题