したがって、次のコードはAngular 4にあり、なぜ期待どおりに機能しないのかわかりません。
これがハンドラーのスニペットです。
onUpdatingServerName(event: Event) {
console.log(event);
this.newserverName = event.target.value; //this wont work
}
HTML要素:
<input type="text" class="form-control" (input)="onUpdatingServerName($event)">
コードは私にエラーを与えます:
プロパティ 'value'はタイプ 'EventTarget'に存在しません。
しかし、console.log
に見られるように、その値はevent.target
に存在します。
ここにあるevent.target
はHTMLElement
であり、これはすべてのHTML要素の親ですが、プロパティvalue
を持つことは保証されていません。 TypeScriptはこれを検出し、エラーをスローします。 event.target
を適切なHTML要素にキャストして、HTMLInputElement
プロパティを持つvalue
であることを確認します。
(<HTMLInputElement>event.target).value
ドキュメント ごと:
$event
を入力します上記の例は、
$event
をany
型としてキャストします。これにより、コードが簡単になります。イベントオブジェクトのプロパティを明らかにし、愚かな間違いを防ぐことができる型情報はありません。[...]
$event
は特定のKeyboardEvent
になりました。 すべての要素にvalue
プロパティがあるわけではないため、target
を入力要素にキャストします。
(エンファシス鉱山)
HTMLInputElementをイベントタイプのジェネリックとして渡すことも機能するはずです。
onUpdatingServerName(event: React.ChangeEvent<HTMLInputElement>) {
console.log(event);
this.newserverName = event.target.value;
}
私に役立つ別の修正を次に示します。
(event.target as HTMLInputElement).value
これは、event.target
がHTMLInputElement
であることをTSに知らせることでエラーを取り除くはずです。これは本質的にvalue
を持っています。指定する前に、TSはevent
のみがHTMLInputElement
であることを知っていた可能性が高いため、TSによると、キー入力されたtarget
はランダムにマップされた値であり、任意の値になります。
私は同様のTypeScriptエラーの解決策を探していました:
TypeScriptのEventTarget型にプロパティ 'dataset'が存在しません
Reactでクリックされたボタン要素のevent.target.dataset
にアクセスしたかった:
<button
onClick={onClickHandler}
data-index="4"
data-name="Foo Bar"
>
Delete Candidate
</button>
TypeScriptを介してdataset
の値を「存在」させる方法は次のとおりです。
const onClickHandler = (event: React.MouseEvent<HTMLButtonElement>) => {
const { name, index } = (event.target as HTMLButtonElement).dataset
console.log({ name, index })
// do stuff with name and index…
}