2015-11-21 8 views
6

Perché in questo caso:Typescript: come verificare tagName in eventTarget?

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

Visual Studio me questo errore mostra?

Build: l'operatore '===' non può essere applicato ai tipi 'HTMLElement' e 'stringa'.

La proprietà 'tagName' non esiste sul tipo 'EventTarget'.

Quando eseguo uno script funziona bene.

Come scrivere correttamente?

Grazie.

risposta

13

vorrei regolare che frammento di codice come questo:

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); 

Casting caso proprietà target-HTMLElement ci darà tutte le proprietà corrette del sottostante elemento.

check in the playground

+0

Grazie. A proposito, puoi consigliarmi un buon tutorial su dattiloscritto? – Klick

+0

Sono davvero contento di vedere che ha aiutato;) Il punto di partenza potrebbe essere basarat e i suoi libri e video, ad es. qui https://basarat.gitbooks.io/typescript/. Nel caso in cui questo aiuti un po ', puoi accettare la risposta;) –

1

due segni uguali confronta i valori tra (int == 'stringa') tipi (vale a dire 19 == '19') evals true.

3 segni di uguale è quando si confrontano valori e tipi. Quindi stai confrontando un tipo di stringa con un tipo HTML. Così eguagliando la falsità. Se si desidera confrontare l'elemento tagname in una stringa di utilizzare due segni uguali

1

In angolare se la proprietà tagName sta dando l'errore sul bersaglio, provare a utilizzare il codice qui sotto

event.target['tagName'] 
+0

Va bene, perché la sicurezza del tipo non interferisce e puoi utilizzarla non solo in Angular. MA non esiste un tipo di sicurezza, quindi la risposta @Radim è migliore. – codeepic