Der folgende Code befindet sich also in Angular 4 und ich kann nicht herausfinden, warum er nicht wie erwartet funktioniert.
Hier ist ein Ausschnitt meines Handlers:
onUpdatingServerName(event: Event) {
console.log(event);
this.newserverName = event.target.value; //this wont work
}
HTML-Element:
<input type="text" class="form-control" (input)="onUpdatingServerName($event)">
Der Code gibt mir den Fehler:
Die Eigenschaft 'value' ist für den Typ 'EventTarget' nicht vorhanden.
Aber wie man an dem sehen kann, console.log
existiert dieser Wert auf dem event.target
.
Antworten:
event.target
Hier ist einHTMLElement
Element, das das übergeordnete Element aller HTML-Elemente ist, dessen Eigenschaft jedoch nicht garantiert istvalue
. TypeScript erkennt dies und löst den Fehler aus. Inevent.target
das entsprechende HTML-Element umwandeln, um sicherzustellen, dass esHTMLInputElement
einevalue
Eigenschaft hat:Gemäß der Dokumentation :
(Hervorhebung von mir)
quelle
var element = ev.target as HTMLElement
onFieldUpdate(event: { target: HTMLInputElement }) {
nach die aufgerufene Funktion. Siehe meine Antwort unten.event.target as HtmlInputlement
Das Übergeben von HTMLInputElement als Generikum an den Ereignistyp sollte ebenfalls funktionieren:
quelle
onChange
Referenz für den Immobilienhandler im React-Code aufgerufen wird . Der React-Handler erwartet nicht, dass der Typ für das React.ChangeEvent festgelegt wird, und zeigt einen Tippfehler an. Ich musste stattdessen auf (eine Variante von) der ausgewählten Antwort mit einer Besetzung zurückgreifen :(event.target as HTMLInputElement).value
.Hier ist ein weiterer Fix, der für mich funktioniert:
(event.target as HTMLInputElement).value
Das sollte den Fehler beseitigen, indem TS wissen lässt, dass
event.target
es sich um eine handeltHTMLInputElement
, die von Natur aus eine hatvalue
. Vor der Angabe wusste TS wahrscheinlich nur, dass diesevent
allein ein Wert war.HTMLInputElement
Laut TS handelte es sich bei dem eingegebenentarget
Wert also um einen zufällig zugeordneten Wert, der alles sein konnte.quelle
Ich suchte nach einer Lösung für einen ähnlichen TypeScript-Fehler mit React:
Ich wollte zu
event.target.dataset
einem angeklickten Schaltflächenelement in React gelangen:So konnte ich den
dataset
Wert über TypeScript auf "existieren" bringen:quelle
onChange={(event: ChangeEvent<HTMLInputElement>): void => { setTextFilter(event.target.value); }}
Sie sollten
event.target.value
prop mit onChange-Handler verwenden, wenn Sie nicht sehen können:Oder Wenn Sie einen anderen Handler als onChange verwenden möchten, verwenden Sie
event.currentTarget.value
quelle
event.currentTarget.value
es der beste Ansatz ist.Die Art und Weise, wie ich es mache, ist die folgende (besser als Typ Assertion imho):
Dies setzt voraus, dass Sie nur an der
target
Immobilie interessiert sind , was der häufigste Fall ist. Wenn Sie auf die anderen Eigenschaften von zugreifen müssenevent
, besteht eine umfassendere Lösung darin, den&
Typschnittoperator zu verwenden:Dies ist eine Vue.js-Version, aber das Konzept gilt für alle Frameworks. Natürlich können Sie spezifischer vorgehen und anstelle eines allgemeinen
HTMLInputElement
zBHTMLTextAreaElement
für Textbereiche verwenden.quelle