Wpis z mikrobloga

#webdev #js Kurcze, wujcio google nie pomaga. Może ktoś z was podrzuci pomysł?
Stack: webpack, babel, eslint + flow

Mam przykładowo metodę:


static addHTML(target: string, content: string) {
window.addEventListener('DOMContentLoaded', () => {
document.querySelector(target || '#root').innerHTML = content;
});
}

Oczywiście działa, ale eslint krzyczy:

Cannot assign content to document.querySelector(...).innerHTML because property innerHTML is missing in null [1].

Co robię źle?
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

static addHTML(target: string, content: string) {
fromEvent(document, 'DOMContentLoaded').subscribe(() => {
document.querySelector(target || '#root').innerHTML = content;
});
}

rxjs też nie pomaga :/
  • Odpowiedz
@ECMAlover: nie wiem jak to jest we flow, ale w TypeScript document.querySelector(target || '#root') zwróciłoby typ HTMLElement | null, czyli tzw. nullable type. Takie zabezpieczenie przed tym że document.querySelector może zwrócić też nulla i powinieneś dodatkowo sprawdzić czy czasem taka sytuacja nie nastąpiła (lub, jeśli jesteś pewien, w TS użyć operatora !). Podejrzewam że we flow jest podobnie.
  • Odpowiedz
@Marmite:
`static addHTML(target: HTMLElement, content: string) {
18| fromEvent(document, 'DOMContentLoaded').subscribe(() => {
19| document.querySelector(target || '#root').innerHTML = content;
20|
  • Odpowiedz
@ECMAlover: no przeciez w querySelector mozesz wpisać "d--a" czy cokolwiek i tego może nie być w dokumencie. To przecież logiczne.

const element = document.querySelector('d--a');
if (element) {
element.innerHTML = content;
}
  • Odpowiedz