1. ホーム
  2. typescript

[解決済み] なぜTypescriptではEvent.targetはElementではないのですか?

2022-04-22 17:36:43

質問

私は単純に、私の KeyboardEvent

var tag = evt.target.tagName.toLowerCase();

一方 Event.target はタイプ EventTarget を継承していない。 Element . そこで、次のようにキャストする必要があります。

var tag = (<Element>evt.target).tagName.toLowerCase();

これはおそらく、一部のブラウザが標準に準拠していないことが原因ではないでしょうか?TypeScriptでブラウザに依存しない正しい実装とは?

追記:jQueryでキャプチャしています。 KeyboardEvent .

解決方法は?

を継承していない Element なぜなら、すべてのイベントターゲットが要素であるとは限らないからです。

MDNより :

イベントターゲットとしては、element、document、windowが一般的ですが、XMLHttpRequest、AudioNode、AudioContextなど、他のオブジェクトもイベントターゲットになり得ます。

さらに KeyboardEvent を使おうとしている場合、DOM 要素や window オブジェクト (そして理論的には他のもの) で発生する可能性があります。 evt.target として定義されます。 Element .

DOM 要素のイベントであれば、以下のように考えて差し支えないと思います。 evt.target .は Element . これはクロスブラウザの動作の問題ではないと思うのですが。単に EventTarget とは異なり、より抽象的なインターフェイスです。 Element .

さらに読む https://github.com/Microsoft/TypeScript/issues/29540