5
respostas

HTMLElement = null; erro

Boa noite galera!

estou com o seguinte problema, quando criei a variável firstFocusableElement e lastFocusableElement HTMLElement = null; recebi o erro abaixo:

Type 'null' is not assignable to type 'HTMLElement'.ts(2322)

Alguém poderia me ajudar a resolver esse erro?

Obs: esse erro só ocorre com o código que estou desenvolvendo com o passar das aulas. quando rodo o projeto já pronto disponibilizado pelo professor isso não acontece.

import { AfterViewInit, Directive, ElementRef } from '@angular/core';

@Directive({
  selector: '[appFocusTrap]'
})
export class FocusTrapDirective implements AfterViewInit {

  private firstFocusableElement: HTMLElement = null;
  private lastFocusableElement: HTMLElement = null;

  constructor(private elementRef: ElementRef<any>) {}

  public ngAfterViewInit(): void {
    const focusableElements = this.elementRef
      .nativeElement
      .querySelectorAll(`
        [tabindex]:not([tabindex="-1"]),
        a[href]:not([disabled]),
        button:not([disabled]),
        textarea:not([disabled]),
        input:not([disabled]),
        select:not([disabled])`
      ) as Array<HTMLElement>;

    this.firstFocusableElement = focusableElements[0];
    this.lastFocusableElement = focusableElements[focusableElements.length - 1];
    this.firstFocusableElement.focus();
  }
}
5 respostas

Na configuração do seu tsconfig.json o “strictNullChecks” está “false”?

Oi Rodrigo!

Não encontrei o “strictNullChecks” no meu tsconfig.json. Apenas "strict" e "strictPropertyInitialization".

tenta colocar "strictNullChecks": false, e vê se funciona.

Testei a sua solução e funciona. Porém acabei optando por uma outra onde adciono um inject no construtor do componente.

constructor(@Inject(DOCUMENT) private _document: Document) {
  }

Obrigado pela resposta!

Bom que deu certo, não lembro mto mais de TypeScript mas precisa inicializar a variável ali com null? E se vc simplesmente não inicializá-la?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software