不产生错误的打字稿特征检测
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();
}
};
我正在尝试在 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();
}
};