2017-06-08 4 views
0

typescript関数で機能の検出を実装しようとしていますが、lintingエラーが発生しています。エラーを作成しないTypescript機能の検出

なぜ私がそれらを入手するのは明らかです。私がチェックしているケースの中には、そのタイプコピー定義にその機能が存在しないからです。たとえば、以下の関数では、 "doc.body.createTextRange"でタイスクリプトエラーが発生します。これらのエラーを回避する最善の戦略だろう何

public searchContent(text:string) { 
    let doc = document; 
    let range:any; 
    let selection: any; 

    if (doc.body.createTextRange) { 
     range = document.body.createTextRange(); 
     range.moveToElementText(text); 
     range.select(); 
    } else if (window.getSelection) { 
     selection = window.getSelection(); 
     range = document.createRange(); 
     range.selectNodeContents(text); 
     selection.removeAllRanges(); 
     selection.addRange(range); 
    } 
} 

(ちなみに、コードがテキストを選択するために使用することができ、Selecting text in an element (akin to highlighting with your mouse)を参照してください)

?すべての可能性のあるケースで身体の定義を拡張することができますが、それは悪い考えです...私はこのケースでは糸くずれのコースを切り替えることができますが、再び良い解決策ではないようです。

+1

何かlintエラーがありますか? lintの設定を妥当なものに変更することを検討してください。 – Halcyon

+0

正直なところ、あなたのベスト・ベットは、あなたの使っているメソッドを含めるように 'body'の定義を拡張することです。もしあなたがそれを使用しようとしているのであれば、適切なオートコンプリート/タイプチェックを自分自身に与えるかもしれません。 –

答えて

0

何かに何かを強制的に受け入れるようにするには、単純に型キャストします。また、この特定のコードでは、それを行う標準的な方法を確認し、IE固有の方法にフォールバックする必要があります。

function hl(element: HTMLElement) { 
    let doc = document; 
    if (!element) 
    return; 
    if (window.getSelection) { 
    let selection = window.getSelection(); 
    let range = document.createRange(); 
    range.selectNodeContents(element); 
    selection.removeAllRanges(); 
    selection.addRange(range); 
    return; 
    } 
    //IE only feature 
    let documentBody = <any>doc.body; 
    if (!documentBody.createTextRange) { 
    let range = documentBody.createTextRange(); 
    range.moveToElementText(element); 
    range.select(); 
    } 
}; 
関連する問題