不产生错误的打字稿特征检测

Typescript feature detection without creating errors

我正在尝试在 typescript 函数中实现特征检测,但我不断收到 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)

避免这些错误的最佳策略是什么?我可以在所有可能的情况下扩展 body 定义,但这似乎是个坏主意......在这种情况下我可以关闭 linting 的当然开关,但再次似乎不是一个好的解决方案。

您只需强制转换为 any 即可强制它接受任何内容。同样在此特定代码中,您应该检查执行此操作的标准方式,然后回退到 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();
  }
};