Я пытаюсь создать функцию, используя машинописный текст, который проверяет нажатие клавиши Enter, а затем, если длина event.target.value больше 0, перейдите на страницу со значением. Это приложение nextjs, отсюда и строка router.push. Код примерно выглядит так:
const goToSearch = (e: React.KeyboardEvent<HTMLInputElement> | React.ChangeEvent<HTMLInputElement>) => {
if (e.key === "Enter") {
e.preventDefault();
if (e.target.value.length > 0) {
router.push(
{ pathname: "/Search", query: { searchVal: e.target.value } },
"/Search"
);
}
}
};
Чтобы вызвать эту функцию, я использую реквизит onKeyDown в элементе ввода, например:
<input
type="search"
className="form-control border border-white"
placeholder="Search"
aria-label="Search"
onKeyDown={goToSearch}
/>
Проблема здесь в том, что, поскольку я использую машинописный текст, тип e может быть событием клавиатуры или событием изменения. Если я использую | чтобы предоставить оба типа, я получаю ошибки, так как машинописный текст не понимает, на какой тип события ссылаться. Можно ли каким-либо образом создать интерфейс или какой-либо пользовательский тип, который использует оба типа событий (событие клавиатуры и событие изменения)? Этот интерфейс или пользовательский тип также должны учитывать функцию void preventDefault.
Спасибо