Возможно, вам придется явно ввести новый объект как ITask
, чтобы сообщить компилятору TypeScript, что вы переводите объект типа ITask
в состояние tasks
.
Кроме того, tasks
необязательно. Один из способов обойти это - установить значение по умолчанию (пустой массив []
) при его распространении.
addTask(name:string) {
const newTask: ITask = {name, done: false}
this.setState((prevState) => ({
tasks: [...(prevState.tasks ?? []), newTask]
}));
}
Учитывая, что tasks
(и даже newTask
) фактически назначено значение в конструкторе, на самом деле нет необходимости помечать его как необязательное для вашего IState
интерфейса.
interface IState {
newTask: string;
tasks: Array<ITask>;
}
Это избавит вас от необходимости проверять, является ли tasks
undefined
, когда вы устанавливают состояние.