W moim reagować i maszynopis aplikacji, używam: onChange={(e) => data.motto = (e.target as any).value}
.
Jak poprawnie zdefiniować typy dla klasy, aby nie musieć hakować systemu typów any
?
export interface InputProps extends React.HTMLProps<Input> {
...
}
export class Input extends React.Component<InputProps, {}> {
}
Jeśli wstawię target: { value: string };
otrzymam:
ERROR in [default] /react-onsenui.d.ts:87:18
Interface 'InputProps' incorrectly extends interface 'HTMLProps<Input>'.
Types of property 'target' are incompatible.
Type '{ value: string; }' is not assignable to type 'string'.
reactjs
typescript
types
typescript-typings
dzikie oczy
źródło
źródło
currentTarget
. W takim razie tak, to działa, ale pytanie dotyczyłotarget
target
w większości przypadków używa się nieprawidłowego. Co więcej, cel nie musiT
nas zmuszać do poprawnego pisaniaReact.ChangeEvent<HTMLInputElement>
przesłać zdarzenie zamiast FormEvent.prawidłowy sposób użycia w języku TypeScript to
Postępuj zgodnie z całą klasą, lepiej zrozumieć:
źródło
lib: ["dom"]
docompilerOptions
wtsconfig.json
as HTMLInputElement
pracuje dla mnieźródło
To,
target
co próbujesz dodać,InputProps
nie jest tym samymtarget
, co chceszReact.FormEvent
Tak więc rozwiązaniem, które mogłem wymyślić, było rozszerzenie typów związanych ze zdarzeniami, aby dodać typ celu, jako:
Gdy masz już te klasy, możesz użyć komponentu wejściowego jako
bez błędów kompilacji. W rzeczywistości możesz również użyć dwóch pierwszych interfejsów powyżej dla innych komponentów.
źródło
na szczęście znajdę rozwiązanie. możesz
a następnie napisz kod taki jak:
e:ChangeEvent<HTMLInputElement>
źródło
Oto sposób z destrukturyzacją obiektów ES6, testowany z TS 3.3.
Ten przykład dotyczy wprowadzania tekstu.
źródło
Dzieje się tak, gdy pracujesz z obiektem
FileList
:źródło
I upewnij się, że masz
"lib": ["dom"]
w swoimtsconfig
.źródło
Używając komponentu potomnego, sprawdzamy typ w ten sposób.
Komponent nadrzędny:
Komponent podrzędny:
źródło
Alternatywą, o której jeszcze nie wspomniano, jest wpisanie funkcji onChange zamiast otrzymywanych właściwości. Korzystanie z React.ChangeEventHandler:
źródło
Dzięki @haind
Tak
HTMLInputElement
pracował dla pola wprowadzaniaTo
HTMLInputElement
jest interfejs jest dziedziczą zHTMLElement
którym jest dziedziczona zEventTarget
na poziomie korzenia. Można więc stwierdzić, za pomocąas
operatora z określonych interfejsów w zależności od kontekstu, jak w tym przypadku jest używanyHTMLInputElement
dla pola wejściowego inne interfejsy mogą byćHTMLButtonElement
,HTMLImageElement
etc.Aby uzyskać więcej informacji, możesz sprawdzić inny dostępny interfejs tutaj
źródło