reactjs - Typescript, styled-component eroare: TS2769: Niciun suprasarcină nu se potrivește cu această apelare. Suprasarcină 1 din 2
Acesta este componenta mea stilizată:
const stopPropagation = (event: Event): void => {
event.stopPropagation();
};
<StyledComp onClick={stopPropagation}> //error occurs here
hi StyledComp
</StyledComp>
și așa am definit-o:
export type Prop = {
onClick: (event: Event) => void;
};
export const StyledComp = styled.div<Prop>`
display: flex;
`;
Dar returnează o eroare de genul:
Tipurile proprietății 'target' sunt incompatibile. Proprietatea 'value' lipsește în tipul 'EventTarget', dar este necesară în tipul '{ value: string; }'. Supraincarcarea 2 din 2, '(props: StyledComponentPropsWithAs<"div", any, StyledComp, never>): ReactElement
, string | ... 1 more ... | (new (props: any) => Component<...>)>', a generat următoarea eroare. Tipul '(event: Event) => void' nu este atribuit tipului '((event: MouseEvent ) => void) & ((event: Event) => void)'. Tipul '(event: Event) => void' nu este atribuit tipului '(event: MouseEvent ) => void'.
Notă: Poți găsi documentația styled-component&Typescript aici!
Editare:
Acesta este tipul Eveniment:
export type Event = {
target: {
value: string;
};
stopPropagation: () => void;
preventDefault: () => void;
};
Răspuns #1
Partea importantă a mesajului de eroare este
Tipul '(event: Event) => void' nu poate fi atribuit tipului '(event: MouseEvent
) => void'
Deci, proprietatea onClick a unui div stilizat are tipul (event: MouseEvent<HTMLDivElement, MouseEvent>) => void și vrei să îi atribui o funcție de tip (event: Event) => void, dar acest lucru nu funcționează, deoarece tipurile sunt incompatibile.
Ar trebui să scrii în schimb:
const stopPropagation = (event: MouseEvent<HTMLDivElement, MouseEvent>): void => {
event.stopPropagation();
};
