javascript - Typescript funktionsupptäckt utan att skapa fel
Jag försöker implementera funktionsdetektering i en TypeScript-funktion, men jag får hela tiden lintfel.
Det är uppenbart varför jag får dem, för i vissa av de fall jag kontrollerar mot, finns funktionen inte i TypeScript-definitionen. Till exempel i funktionen nedan får jag ett TypeScript-fel på "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);
}
}
(Förresten, koden kan användas för att markera text, se Markera text i ett element (liknande att markera med musen))
Vad skulle vara den bästa strategin för att undvika dessa fel? Jag skulle kunna utöka kroppens definition med alla möjliga fall, men det verkar vara en dålig idé... Jag kan förstås stänga av linting i detta fall, men det verkar återigen inte vara en bra lösning.
Svar #1
Du kan helt enkelt typomvandla till any för att tvinga det att acceptera vad som helst. Även i denna särskilda kod bör du kontrollera det standardmässiga sättet att göra det och sedan falla tillbaka på den IE-specifika.
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();
}
};
