2017-06-08 21 views
0

我試圖在打字稿功能中實現功能檢測,但我不斷收到linting錯誤。打字稿功能檢測沒有創建錯誤

這很明顯,爲什麼我得到它們,因爲在我檢查的一些情況下,功能在打字稿定義中不存在。例如在下面的函數中,我在「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)

什麼是避免這些錯誤的最好策略是什麼?我可以用所有可能的情況擴展身體定義,但這似乎是一個不好的主意......在這種情況下,我可以關閉linting的路線,但似乎不是一個好的解決方案。

+1

你會得到什麼lint錯誤?考慮將你的皮棉配置改爲合理的。 – Halcyon

+0

老實說,我認爲你最好的選擇是擴展'body'的定義以包含你使用的方法,最好是用一個大的doc評論說**在使用它之前檢查這個存在**。如果你打算使用它,不妨給自己適當的自動完成/類型檢查。 –

回答

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