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.
