angular - TypeScript-ekvivalenten av JavaScript includes()


Får en TypeScript-feil når jeg bruker includes på et array-element. Selvfølgelig fungerer det fint når det kompileres til js, men jeg får fortsatt følgende TypeScript-feil:

Egenskapen 'includes' finnes ikke på typen 'boolean[]'

Kode :

validAttrs() {
  let valid: boolean[] = this.required.map((value, index) => {
    if(this.elm.nativeElement.getAttribute(value) === null) {
      return false;
    };
    return true;
  });
  return valid.includes(false) ? false : true;
}

Svar #1

Når det gjelder å fikse kompilasjonsfeilen, ble kompilasjonsproblemet løst ved å legge til es2016 i lib-alternativet i min tsconfig.json. Dette legger til den nødvendige deklarasjonen av includes på arrays.

Jeg prøvde med TypeScript 2.1.4 den foreslåtte løsningen med å erstatte boolean[] med Array<boolean>. Det gjorde ingen forskjell overhodet. Logisk sett burde det ikke ha noen forskjell fordi boolean[] og Array<boolean> er det samme.

Dette sagt, er jeg enig med torazaburo i at OPs kode bør implementeres som:

validAttrs() {
  return this.required.every(value => this.elm.nativeElement.getAttribute(value) !== null);
}

I tillegg til å fjerne unødvendig logikk, har dette også fordelen at every slutter å inspisere arrayen så snart callbacken returnerer en falsk verdi. Det er ingen vits i å inspisere resten fordi returverdien nødvendigvis vil være false så snart callbacken returnerer en falsk verdi. På den annen side vil implementeringen i spørsmålet alltid utføre testen på alle elementene i arrayen. Hvis det aller første elementet feiler testen, vil den til slutt inspisere resten av arrayen unødvendig!!

Svar #2

Kommentar fra @echonax fungerte for meg.

validAttrs() {
  let valid: Array<boolean> = this.required.map((value, index) => {
    if(this.elm.nativeElement.getAttribute(value) === null) {
      return false;
    };
    return true;
  });
  return valid.includes(false) ? false : true;
}

Relaterte artikler