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;
}
