2017-09-12 3 views
2

Ich habe eine Methode, die ein modalWindow, die ein Element als Eingabe (mit $ event.target) oder eine Zahl nimmt. Ich versuche, den Typ der Eingabe zu überprüfen, aber die Prüfung behandelt Element immer als Zahl, auch wenn es nicht ist. Ob das Element eine Zahl ist oder nicht, das console.log wird ausgegeben und das Else wird nie ausgeführt.typescript Prüfung mit Typ Wachen

launchModal(element: number | any) { 

    if (<number>element) { 

     console.log('ele as num', element); 
    } else { 
     const elementId = (event.target as Element).id; 
     const elementIdArray = String(elementId).split('-'); 
     this.currentRow = parseInt(elementIdArray[2], 10); 

    } 
    this.loadEquipmentFullRowDataRequest(this.currentRow); 

    } 

ich im Anschluss an die Dokumentation für fortgeschrittene Typen an der official site

Antwort

3

In Typoskript ist die Art der Systemzeit im laufenden Betrieb nur kompilieren, wird der Code transpiled zu JavaScript und alle Typinformationen verloren.

Wenn Sie if (<number>element) sagen die Besetzung eigentlich nicht alles tun, erlaubt es Ihnen nur Code zu schreiben, als eine Zahl zu element bezieht (hier sind Sie nichts zu tun element so sinnlos es ist).

Um zu überprüfen, ob der Wert, den Sie haben wirklich eine Zahl Sie JavaScript-Methoden verwenden:

if(typeof(element) === 'number') 
1

if(<number>element) nicht geben Sie überprüfen, ob das Element eine Zahl ist, kompiliert, sobald es wird nur prüfen, ob element ist nicht null oder undefined.

Versuchen Sie Folgendes:

const launchModal = (elem: number | HTMLElement) => { 
    if (!elem) { 
     return; 
    } 

    let row = elem as number; 
    if (elem instanceof HTMLElement) { 
     row = parseInt(elem.id.split('-')[2], 10); 
    } 

    // load row data 
} 

z.B. :

launchModal(10); 

launchModal(document.getElementById('...'));