javascript - Hvordan setter jeg riktig type for en klikkhåndterer når jeg bruker Svelte med TypeScript?


Jeg bruker Svelte med TypeScript. Jeg har en knapp:

<button on:click|preventDefault={clickHandler}>
   Click me
</button>

Jeg prøver å sette korrekt type for klikkhåndtereren.

export let clickHandler: MouseEventHandler<HTMLButtonElement>;

Jeg fikk MouseEventHandler<HTMLButtonElement> fra TS-feilen når jeg bruker en annen type, f.eks:

Type 'Function' kan ikke tildeles til type 'MouseEventHandler'.

Men dette feiler med Cannot find name 'MouseEventHandler'. Jeg klarer ikke å finne ut hvor jeg skal importere typen MouseEventHandler siden den ikke eksporteres av Svelte.

Hvordan setter jeg riktig type for en klikkhåndterer når jeg bruker Svelte med TypeScript?

Svar #1

Videre undersøkelse viser at Sveltes hendelseshåndterere - ja, Sveltes, ikke Reacts - er under svelte.JSX. Ja, når du bruker vanlige .svelte-komponenter og ikke bruker JSX. Jeg så faktisk JSX-referanser i forskningen min, men ignorerte dem fordi jeg ikke brukte JSX. Men jeg antar at Sveltes TS-funksjonalitet kanskje utnytter noe eksisterende arbeid fra React?

Så den korrekte TS-typen for en klikkhåndterer er:

export let clickHandler: svelte.JSX.MouseEventHandler<HTMLButtonElement>;

Svar #2

Selv om du kan angi typen på egenskapen, vil du kanskje bare videresende hendelsen i stedet:

<button on:click|preventDefault>
   Click me
</button>

(Dokumenter - Etter modifikatorer)

På den måten kan alt som bruker komponenten også bare legge til en on:click på komponenten.