Dans ma réaction et l' application tapuscrit, je l' utilise: onChange={(e) => data.motto = (e.target as any).value}
.
Comment définir correctement les typages de la classe, pour ne pas avoir à me frayer un chemin dans le système de types avec any
?
export interface InputProps extends React.HTMLProps<Input> {
...
}
export class Input extends React.Component<InputProps, {}> {
}
Si je mets target: { value: string };
j'obtiens:
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
yeux sauvages
la source
la source
currentTarget
. Dans ce cas oui, ça marche, mais la question portait surtarget
target
incorrect dans la plupart des cas. De plus, la cible n'a pasT
à nous forcer à écrire correctementReact.ChangeEvent<HTMLInputElement>
plutôt qu'un FormEvent.la bonne façon d'utiliser dans TypeScript est
Suivez le cours complet, il vaut mieux comprendre:
la source
lib: ["dom"]
àcompilerOptions
entsconfig.json
as HTMLInputElement
travaille pour moila source
Le que
target
vous avez essayé d'ajouterInputProps
n'est pas le même quetarget
vous vouliez qui estReact.FormEvent
Donc, la solution que j'ai pu trouver était d'étendre les types liés aux événements pour ajouter votre type de cible, comme:
Une fois que vous avez ces classes, vous pouvez utiliser votre composant d'entrée comme
sans erreurs de compilation. En fait, vous pouvez également utiliser les deux premières interfaces ci-dessus pour vos autres composants.
la source
chanceux je trouve une solution. vous pouvez
puis écrivez du code comme:
e:ChangeEvent<HTMLInputElement>
la source
Voici une méthode de déstructuration d'objets ES6, testée avec TS 3.3.
Cet exemple concerne une saisie de texte.
la source
C'est lorsque vous travaillez avec un
FileList
objet:la source
Et assurez-vous d'avoir
"lib": ["dom"]
dans votre fichiertsconfig
.la source
Lors de l'utilisation du composant enfant, nous vérifions le type comme ceci.
Composant parent:
Composant enfant:
la source
Une alternative qui n'a pas encore été mentionnée est de taper la fonction onChange au lieu des accessoires qu'elle reçoit. Utilisation de React.ChangeEventHandler:
la source
Merci @haind
Oui a
HTMLInputElement
travaillé pour le champ de saisieIl
HTMLInputElement
s'agit d'une interfaceHTMLElement
héritée de laquelle est héritéeEventTarget
au niveau racine. Par conséquent, nous pouvons affirmer en utilisant unas
opérateur d'utiliser des interfaces spécifiques en fonction du contexte, comme dans ce cas, nous utilisonsHTMLInputElement
pour le champ de saisie d'autres interfacesHTMLButtonElement
,HTMLImageElement
etc.Pour plus de références, vous pouvez consulter une autre interface disponible ici
la source