2017-09-12 5 views
2

私は、($ event.targetを使用して)要素を入力として取るmodalWindowを起動するメソッドを持っています。私は入力の種類のチェックを実行しようとしているが、チェックは常に要素が数字でないとしても扱います。要素が数字かどうかはconsole.logが出力され、elseは決して実行されません。タイプガードを使用したタイプスクリプトのチェック

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

    } 

私はtypescriptですでofficial site

答えて

3

型システムで高度な種類のドキュメントを次の時間のみをコンパイルされ、実行時にコードがJavaScriptにtranspiledされ、すべての種類の情報が失われます。

あなたはif (<number>element)キャストが実際に何もしないと言う、それはちょうどあなたが数(ここではあなたがelementに何もしていないので、それは無意味だ)としてelementを参照するコードを記述することができます。要素が数値であるかどうかを確認入力していません

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

if(<number>element)、一度コンパイルされ、それはちょうどかどうかをチェックします:あなたが得た値を使用して、JavaScriptのメソッドを使用する必要が数が本当にあるかどうかを確認するために

elementnullまたはundefinedではありません。

次のことを試してみてください。

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 
} 

例えば:

launchModal(10); 

launchModal(document.getElementById('...')); 
関連する問題