【问题标题】:Property 'forEach' does not exist on type 'Alias" [closed]“别名”类型上不存在属性“forEach”[关闭]
【发布时间】:2020-05-03 13:43:27
【问题描述】:

我正在尝试从我的对象密钥中删除收件人,然后添加收件人密钥但使用新值。

这看起来工作正常:

this.alias.forEach((key) => {
      delete key["recipients"];
      key["recipients"] = this.newRecipients;
    })

但我得到了错误:

“别名”类型上不存在属性“forEach”。

这是我的 Alias 模型:

export interface Alias {
    nr?: number;
    local_part?: string;
    domain?: string;
    recipients?: string;
}

还有声明:

alias: Alias = {};

应该怎么样?

【问题讨论】:

  • 如果要使用forEachalias需要是一个数组。
  • 您所说的“这看起来工作正常”和“但我遇到错误”是什么意思?
  • @palaѕн - 我怀疑 OP 的意思是“在我看来这应该可以工作,但我得到一个错误。”

标签: javascript angular typescript


【解决方案1】:

您的alias 不是一个数组(或NodeList 或类似的),这就是它没有forEach 的原因。但是你不需要forEach,没有理由在你的代码中循环。

您也不需要在更改其值之前删除属性。直接赋值即可:

this.alias.recipients = this.newRecipients;

您可能已经习惯了出于内存管理原因必须执行诸如删除字符串或类似操作的语言(例如,C++ 中的newdelete)。 JavaScript 的 delete 运算符与其他语言中的 delete 运算符完全不同;它有一个完全不同的目的。 (它会从对象中删除一个属性——您几乎不需要这样做。)它用于内存管理。 JavaScript 是一种垃圾收集语言,您不必告诉它何时从内存中删除某些内容,它会在它发现没有任何内容引用该内容时执行此操作。

另外请注意,没有理由使用括号表示法和字符串,您可以使用上述文字表示法。

【讨论】:

  • 但是 this.alias 仍然从后端获取旧值。而不是 newRecipients
  • @MarcinDomorozki - 我看到您在上述评论大约一小时后接受了答案,所以我猜您意识到旧的收件人没有保留?
  • 我刚刚创建了新对象 :)
  • @MarcinDomorozki - 没有理由这样做。答案中的代码行确实替换了recipients 属性的值。
  • 但如果我想做 console.log this.alis 我仍然有旧值
猜你喜欢
  • 2017-12-14
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 2018-11-09
  • 2018-03-03
  • 1970-01-01
  • 2019-05-13
相关资源
最近更新 更多