TypeScript equivalent of JavaScript includes()



在数组元素上使用包含时遇到 TypeScript 错误。当然,一旦编译为 js,它就可以正常工作,但我仍然收到以下 TypeScript 错误:

属性"include"在

类型"布尔值[]"上不存在

法典:

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

就修复编译错误而言,修复的编译问题是将es2016添加到我的tsconfig.json中的lib选项中。这将在数组上添加必要的includes声明。

我尝试使用TypeScript 2.1.4建议的解决方法,将boolean[]替换为Array<boolean>。这没有任何区别。从逻辑上讲,它不应该有什么区别,因为boolean[]Array<boolean>是一回事


话虽如此,我同意torazaburo的观点,即OP的代码应该实现为:

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

除了删除不必要的逻辑之外,这还具有every在回调返回错误值后立即停止检查数组的优点。检查其余部分是没有意义的,因为一旦回调返回虚假值,返回值就必须false。另一方面,问题中的实现将始终对数组的所有元素执行测试。如果第一个元素未通过测试,那么它将不必要地检查数组的其余部分!!

@echonax的评论对我有用。

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

你甚至不需要includes来做你想做的事情。您的代码可以简单地

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

这样做还有一个优点,即在找到第一个 null 值的那一刻,它将停止检查。

最新更新