полученный тип ‘void’ не может быть присвоен типу ‘() => void’ в react typescript

#reactjs #typescript

Вопрос:

Я пытался передать реквизит, как

 <Mycomp
 deleteAcc={handleDelete(accountId)}
/>
 

к другому компоненту. Я пишу реквизит, как

 interface AccProps {
 deleteAcc: () => void;
}
 

и вызовите функцию, например

 deleteAcc()
 

Но я получил следующую ошибку

 Type 'void' is not assignable to type '() => void'
 

Не знаю, что я здесь пропустил.

Комментарии:

1. передай это вот так: deleteAcc={() => handleDelete(accountId)}

2. Убедитесь, что вы прочитали документы react, особенно это reactjs.org/docs/faq-functions.html

Ответ №1:

Скорее всего , потому, что тип возвращаемого значения handleDelete функции является void , и вы передаете возвращаемое значение handleDelete . в то время deleteAcc как требуется функция с () => void типом.

Попробуй:

 <Mycomp deleteAcc={() => handleDelete(accountId)}/>
 

Ответ №2:

Когда вы передаете handleDelete(accountId) в качестве опоры, функция вызывается немедленно, и ее возвращаемое значение (в данном случае a void ) является тем, которое передается в качестве опоры. Если функция должна принимать этот конкретный аргумент, отправьте его в качестве обратного вызова:

 <Mycomp deleteAcc={() => handleDelete(accountId)} />
 

Начиная с handleDelete(accountId) reutrn void , этот обратный вызов типизирован () => void и, следовательно, соответствует типу prop.

Если функция не обязана принимать аргумент, вы можете отправить его по имени:

 <Mycomp deleteAcc={handleDelete} />
 

Часто хорошей идеей является создание уникальной функции-оболочки в компоненте и отправка ее по имени, например:

 const wrapper = () => {
  handleDelete(accountId);
};

<Mycomp deleteAcc={wrapper} />