【问题标题】:Operator '>' cannot be applied to types 'void' and 'number' in Angular 8运算符'>'不能应用于Angular 8中的类型'void'和'number'
【发布时间】:2019-09-20 05:51:13
【问题描述】:

我的打字稿文件中有以下代码,但是当我编译它时,它给了我类似的错误

运算符 '>' 不能应用于类型 'void' 和 'number'

谢谢..

这是我的代码

this.languages.forEach((o: any, i: any) => {
                const control1 = new FormControl(this.UserSelectedLanguages.indexOf(o.id) > -1); // if first item set to true, else false
                (this.languageform.controls.selectedlang as FormArray).push(control1);
});

【问题讨论】:

  • 你能解释一下你想要达到什么目的吗?您是否尝试在 control1 中设置默认值(true 或 false)?
  • this.UserSelectedLanguages 的类型到底是什么?
  • this.UserSelectedLanguages 中,我得到了类似 ["1","2","3"] 的数组,我必须检查我的 o.id 是否存在。
  • 尝试使用 this.UserSelectedLanguages.includes(o.id)

标签: javascript angular typescript


【解决方案1】:

考虑到这一点,我突然想到 typescript 的全部意义在于静态类型,因此尝试将来自 indexOf 的返回视为布尔值与 TS 的本质背道而驰。

此外,我不清楚indexOf 将如何返回voidUserSelectedLanguages是一个普通的js数组吗?

我对 angular 或 typescript 不太熟悉,但看起来 this.UserSelectedLanguages.indexOf(o.id) 返回 void,并且您无法在 void 和数字之间进行大于比较。如果是这种情况,您实际上不必将其与任何东西进行比较。它的非空存在表明它就在那里:

// this alone may resolve to true or false
!!this.UserSelectedLanguages.indexOf(o.id)

【讨论】:

  • 感谢您的快速回复。但它给了我类似“无法测试'void'类型的表达式的真实性”之类的错误..
  • 用更好的潜在解决方案更新了我的答案。尽管尝试将 void 转换为布尔值可能会产生类似的错误。不确定 TS 是如何处理这些东西的。
  • 对。在我发布后,我突然想到 TS 的全部意义在于静态类型,因此尝试将 void 转换为布尔值与 TS 所做的事情背道而驰。我建议查看 TS 文档或搜索如何在 TS 中将 void 转换为布尔值。
  • 更多我不知道我在说什么的证据:为什么indexOf 返回无效? UserSelectedLanguages 是一个数组吗? indexOf 不是总是返回索引还是-1?我不清楚你是如何从这个表达中得到空虚的。 UserSelectedLanguages 有可能是无效的吗? TS 是否为在 void 上调用方法提供保护?
  • indexOf 如果无法从数组中找到任何数字,则返回 -1。而且我没有将UserSelectedLanguages 声明为数组。有可能没有声明它会自动失效吗?
【解决方案2】:

确保this.UserSelectedLanguages 实际上是array,因为它似乎不是。

此外,一个快速肮脏的解决方案是做这样的事情。

const control1 = new FormControl(<number>this.UserSelectedLanguages.indexOf(o.id) > -1);

【讨论】:

  • 它给了我错误,例如 this.UserSelectedLanguages is not an function..而且也不起作用。
  • 试试这个&lt;number&gt;(this.UserSelectedLanguages.indexOf(o.id))
  • 抱歉不工作
【解决方案3】:

感谢您的回答..

我用这个解决了问题..

我已经输入了this.UserSelectedLanguages.indexOf(o.id) !== -1 而不是this.UserSelectedLanguages.indexOf(o.id) &gt; -1,我的问题解决了..

【讨论】:

    猜你喜欢
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2021-07-27
    相关资源
    最近更新 更多