Это мой стилизованный компонент:
const stopPropagation = (event: Event): void => {
event.stopPropagation();
};
<StyledComp onClick={stopPropagation}> //error occurs here
hi StyledComp
</StyledComp>
и вот как я это определил:
export type Prop = {
onClick: (event: Event) => void;
};
export const StyledComp = styled.div<Prop>`
display: flex;
`;
Но он возвращает ошибку вроде:
TS2769: этому вызову не соответствует ни одна перегрузка. Перегрузка 1 из 2, '(реквизиты: Pick ‹Pick‹ Pick ‹DetailHTMLProps‹ HTMLAttributes, HTMLDivElement ›, title | slot | ... еще 252 ... | is› & {...;} & StyledComp, title |. .. еще 254 ... | is ›& Partial‹ ... ›, title | ... еще 254 ... | is› & {...;} & {...;}): ReactElement ‹. .. ›', выдает следующую ошибку. Тип '(event: Event) = ›void' не может быть назначен типу '((event: MouseEvent‹ HTMLDivElement, MouseEvent ›) =› void) & ((event: Event) = ›void)'. Тип '(event: Event) = ›void' не может быть назначен типу '(event: MouseEvent‹ HTMLDivElement, MouseEvent ›) =› void'. Типы параметров «событие» и «событие» несовместимы. Тип MouseEvent ‹HTMLDivElement, MouseEvent› нельзя присвоить типу Event. Типы собственности "target" несовместимы. Свойство 'value' отсутствует в типе 'EventTarget', но является обязательным в типе '{value: string; } '. Перегрузка 2 из 2, '(props: StyledComponentPropsWithAs ‹div, any, StyledComp, never›): ReactElement ‹StyledComponentPropsWithAs‹ div, any, StyledComp, never ›, string | ... еще 1 ... | (new (props: any) = ›Component‹ ... ›)› ', выдает следующую ошибку. Тип '(event: Event) = ›void' не может быть назначен типу '((event: MouseEvent‹ HTMLDivElement, MouseEvent ›) =› void) & ((event: Event) = ›void)'. Тип '(event: Event) = ›void' не может быть назначен типу '(event: MouseEvent‹ HTMLDivElement, MouseEvent ›) =› void'.
Примечание. Документы по стилевым компонентам и Typescript можно найти здесь!
Изменить:
Это тип события:
export type Event = {
target: {
value: string;
};
stopPropagation: () => void;
preventDefault: () => void;
};
import { MouseEvent } from 'react'
. MouseEvent для ограничительной обработки событий не является необходимым и бессмысленным, поэтому, если вы хотите использовать ограничительный подход, вы можете сделать это следующим образом:MouseEvent<HTMLElement>
или для общего использования вы можете просто использовать толькоMouseEvent
. 12.10.2020