2015-11-21 9 views
6

Typescript:eventTargetのtagNameをチェックするには?なぜ、この場合

var ele = <HTMLDivElement>document.getElementById("toolbar"); 
    ele.addEventListener("click", function (e) { 
     if (e.target.tagName === "SPAN") { console.log(e.target.tagName) } }, false); 

Visual Studioは、私にこのエラーが表示さ?

ビルド:演算子 '==='は 'HTMLElement'型と 'string'型には適用できません。

プロパティ 'tagName'が 'EventTarget'タイプに存在しません。

私はスクリプトをうまく動作させます。

正しく書き込むには?

ありがとうございます。

答えて

13

私はこのようなことのコードスニペットを調整します:HTMLElement

イベントプロパティ targetキャスティング
var ele = <HTMLDivElement>document.getElementById("toolbar"); 
    ele.addEventListener("click", (ev: MouseEvent) => { 
     var element = ev.target as HTMLElement;  
     if (element.tagName === "SPAN") { 
      console.log(element.tagName) 
     } 
    }, false); 

は私たちに基礎となる要素のすべての適切な特性を与えます。

the playground

+0

の下に使用してみてください、ありがとうございました。あなたは私に良いタイスクリプトのチュートリアルをお勧めできますか? – Klick

+0

私は本当に助けてくれてうれしいです;)出発点はbasaratと彼の本やビデオです。ここhttps://basarat.gitbooks.io/typescript/。これがちょっと助けてくれた場合は、答えを受け入れることができます;) –

1

二つの等しい符号でそれをチェック(INT == '列')のタイプ(すなわち、19 == '19')の間の値をtrueに試用版を比較します。

3等号は値と型を比較す​​るときです。したがって、文字列型とHTML型を比較しています。したがって、偽りに等しい。あなたは文字列にタグ名の要素を比較したい場合には、2つの等号角度で

1

を使用するのtagNameプロパティは、ターゲット上のエラーを与えている場合は、コード

event.target['tagName'] 
+0

これは良いことです。型の安全性が損なわれているわけではなく、Angularだけでなく使用することもできます。しかし、型の安全性がないので、@ Radimの答えが良いです。 – codeepic