javascript - Korrekt bruk av React.Events i TypeScript 2.0?


Jeg har en app som bruker React og TypeScript. Jeg oppdaterte nylig type-definisjonene mine for å bruke npm @types-navnerommet for å lagre dem i node_modules-mappen min.

Tidligere, når man jobbet med DOM-hendelser, tilfredsstilte en metodesignatur som denne typedefinisjonene:

public updateValue(e: React.FormEvent): void {

Nå får jeg imidlertid kompilatorfeil:

(46,25): error TS2314: Generic type 'FormEvent<T>' requires 1 type argument(s).  

Og etter å ha sett i React-type-definisjonsmappen, tar den faktisk inn en generisk:

interface FormEvent<T> extends SyntheticEvent<T> {
}

Mitt spørsmål er egentlig hva bruksområdet for denne generiske er, hvordan den bør brukes og hvilke fordeler den gir? Jeg kunne ganske enkelt endre metoden min til:

public updateValue(e: React.FormEvent<any>): void {

Og dette ville oppfylle kravet til typedefinisjonen. Men hva er den tiltenkte brukstilfellet?

Svar #1

Fra å lese react.d.ts-filen du har lenket til, ser det ut til at den generiske parameteren tilsvarer HTMLElement spesifisert i currentTarget-egenskapen. Mozilla Docs indikerer at dette vanligvis er et Element.

[currentTarget: EventTarget & T;]

T forblir uspesifisert frem til

interface ReactHTMLElement<T extends HTMLElement> extends DOMElement<HTMLAttributes<T>, T> {

som ser ut til å støtte ideen om at T er et element. Jeg tror målet med generikken er å kunne få tilgang til element-spesifikke egenskaper (src-tagger og slikt ved bruk av HTMLImageElement, for eksempel) på currentTarget-egenskapen. Det finnes et problem som foreslår å gjøre noe lignende i kjerne lib.d.ts sammen med noen diskusjoner om relaterte problemstillinger.

Så vidt jeg kan se er React-typing en implementering av den samme kjerneideen.

Relaterte artikler