J'essaie de comprendre quel type Typecript un événement de modification est utilisé dans un projet angulaire.
Le code est quelque chose de simple comme ceci:
file-upload.component.html
Property 'files' does not exist on type 'EventTarget'
fichier-upload.ts
public onChange(event: Event): void { if (event.target.files && event.target.files.length) { const [file] = event.target.files; console.log(file); } }
Taper l'événement comme l' Event
me donne l'erreur de peluchage Tapuscrit suivante:
<input type="file" (change)="onChange($event)"/>
Que dois-je taper ceci sinon Event
?
4 Réponses :
les fichiers doivent être accessibles via la propriété event.srcElement.files
.
Cela me donne une erreur de linting TS similaire. La Property 'files' does not exist on type 'Element'.
C'est un événement. Mais vous allez devoir convertir le const que vous utilisez en HTMLInputElement.
public onChange(event: Event): void { if ((event.target as HTMLInputElement).files && (event.target as HTMLInputElement).files.length) { const [file] = event.target.files; } }
Le seul autre moyen sera de supprimer l'erreur avec tsignore. Dans react, flow, ils ont un type SyntheticEvent que vous pouvez taper ce cas particulier pour le contourner mais angular n'a pas de véritable équivalent.
Cela fonctionne pour éliminer cette erreur TS, mais a un problème avec la ligne 3: le Type 'FileList' is not an array type
@ qt-ray
Seriez-vous capable d'encapsuler event.target dans la ligne trois en tant que HTMLInputElement et d'utiliser const files = (event.target as HTMLInputElement).files
et obtenir le fichier dont vous avez besoin? Je peux vous aider davantage si vous le souhaitez aussi!
public onChange(event: ChangeEvent<HTMLInputElement>) { const [file] = event.target.files; }
ChangeEvent n'est pas un type valide dans Typescript ou Angular
public onChange(event: Event): void { const input = event.target as HTMLInputElement; if (!input.files?.length) { return; } const file = input.files[0]; console.log(file); }
Vous devez enquêter sur [(ngModel)] pour obtenir la référence de l'entrée
Je pense que vous cherchez à obtenir votre event.target est
(event.target as HTMLInputElement).value
place etEvent
est correct étant donné que c'est l' interface correcte pour lechange
techniquement, mais ne peut pas tester pour le moment donc juste un commentaire.