使用数组元素上的includes获取TypeScript错误。当然,一旦编译成js它工作正常但我仍然得到以下TypeScript错误:
属性'包含'在类型'boolean []'
上不存在
代码:
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;
}
答案 0 :(得分:3)
就修复编译错误而言,修复了编译问题,即在我es2016
的{{1}}选项中添加了lib
。这为数组添加了tsconfig.json
的必要声明。
我尝试使用TypeScript 2.1.4 includes
将boolean[]
替换为Array<boolean>
。它没有任何区别。从逻辑上讲,它不应该有所作为,因为boolean[]
和Array<boolean>
是相同的事情。
话虽如此,我同意suggested fix OP的代码应该实现为:
validAttrs() {
return this.required.every(value => this.elm.nativeElement.getAttribute(value) !== null);
}
除了删除不必要的逻辑之外,这还有一个优点,即every
一旦回调返回一个假值,就会停止检查数组。检查其余部分是没有意义的,因为一旦回调返回一个假值,返回值必然是false
。另一方面,问题中的实现总是对数组的所有元素执行测试。如果第一个元素未通过测试,那么它将不必要地检查阵列的其余部分!!
答案 1 :(得分:2)
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;
}
答案 2 :(得分:2)
您甚至不需要includes
来完成您的工作。您的代码可以简单地
validAttrs() {
return this.required.every(value => this.elm.nativeElement.getAttribute(value) !== null);
}
这也有一个好处,就是它会在找到第一个空值时停止检查。