React/TypeScript函数类型定义报错:期望0个参数却传入1个
问题解决:函数参数类型不匹配导致的TS错误
你遇到的「Expected 0 arguments, but got 1」错误,根源是Props类型中对changeTask的定义和实际调用不匹配:
当前Props里的changeTask定义为() => {},这表示该函数不接受任何参数,但你在调用时传入了一个Task对象,类型校验自然报错。
修正步骤:
修正
changeTask的类型定义:
在Props类型中,明确changeTask接受一个Tasks类型的参数,若无需返回值则设为void:type Props = { Tasks: Tasks[]; changeTask: (updatedTask: Tasks) => void; };如果你只需要更新Task的部分属性(比如仅修改
status和priority),可以用Partial<Tasks>让类型更灵活:changeTask: (updatedTask: Partial<Tasks>) => void;补充其他规范类型(可选但推荐):
- 给
handleSaveTask的event加上明确类型:(event: React.FormEvent<HTMLFormElement>) - 补充原
Tasks类型缺失的id字段(代码里用到了task.id),同时确保id、status、priority这些变量有正确的类型定义:type Tasks = { id: string; title: string; author: string; description: string; status: string; priority: string; };
- 给
修正后的核心代码片段:
import React, { useState, FC, FormEvent } from "react"; type Tasks = { id: string; title: string; author: string; description: string; status: string; priority: string; }; type Props = { Tasks: Tasks[]; changeTask: (updatedTask: Tasks) => void; }; const TaskComponent: FC<Props> = ({ Tasks, changeTask }) => { const id = "sample-task-id"; // 根据实际场景赋值 const [status, setStatus] = useState<string>(""); const [priority, setPriority] = useState<string>(""); const task = Tasks.find((task) => String(task.id) === id); const handleSaveTask = (event: FormEvent<HTMLFormElement>) => { event.preventDefault(); if (!task) return; // 避免task为undefined的情况 changeTask({ ...task, status, priority }); }; return ( <form onSubmit={handleSaveTask}> {/* 表单内容 */} </form> ); };
内容的提问来源于stack exchange,提问作者user21728832
相关产品推荐
相关产品推荐

