【问题标题】:Cannot assign a type to a string in angular无法将类型分配给角度字符串
【发布时间】:2021-05-05 18:01:07
【问题描述】:

大家好,我需要帮助,我无法将字符串属性推送到键、值数组; 我有

         selRoles!: Array<{name:string}>;



  // then i try to map the role.names to the typed Array<{name:string}>.because the map function returns an Array<string> without the type name? 
  this.selRoles = data.roles.map(role => role.name);

  //here is my subscribe method which returns some rest data
  this.userService.getUserById(this.id).subscribe(data => {
        this.user = data; 
      // i also tried to use forEach with type like this

      data.roles.forEach(role => this.selRoles.push({name:role.name}));
      console.log("selRoles " +this.selRoles.forEach(item => item.name));
}, 
error => console.log(error)
)

总是有一个错误,VC代码描述如下 'string' 类型的参数不能分配给 '{ name: string; 类型的参数; }'.ts(2345)

如何将类型指定为字符串的属性?你能帮我吗。非常感谢。谢谢

【问题讨论】:

  • 您的.map() 调用返回一个字符串数组,但您需要一个具有name 属性的对象数组。 data.roles.map(role =&gt; {name: role.name});。或者,您可以将类型提示更改为 Array
  • 嗨,是的,我试过了:this.selRoles = data.roles.map(role => {name:role.name});但是编译器仍然说:类型'void []'不可分配给类型'{名称:字符串; }[]'。
  • 嗯,是的,我打错了。你需要一个 return 语句,否则解释器会认为 {} 是一个功能块而不是一个对象。在下面的答案中是正确的。

标签: angular typescript


【解决方案1】:

您的代码存在两个问题。首先this.selRoles.forEach return void。其次data.roles.map(role => role.name) 我会返回["string, "string", "string"],你需要改一下。

这是你需要做的:

selRoles!: Array<{name:string}>;

this.selRoles = data.roles.map(role => {return {name: role.name}});

  this.userService.getUserById(this.id).subscribe(data => {
        this.user = data; 
     

      data.roles.forEach(role => this.selRoles.push({name:role.name}));
      console.log("selRoles " +this.selRoles.map(item => item.name).join(", "));
}, 
error => console.log(error)
)

【讨论】:

  • 是的,这是我需要你正确识别的缺失的拼图和平。但是当我尝试推送包含名称:字符串的 selRoles 变量时,我现在遇到了另一个问题。 this.user.roles.push(this.selRoles.map(role => role.name)); '(() => string)[]' 类型的参数不能分配给 '{ name: string; 类型的参数; }'。类型 '(() => string)[]' 中缺少属性 'name',但类型 '{ name: string; 中是必需的
  • 试试看:this.user.roles.push(...this.selRoles.map(role => {return {name: role.name}}))
  • 是的,传播算子就是缺失的和平
  • 如果这些东西对你有用,你能标记我的答案吗?
猜你喜欢
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
相关资源
最近更新 更多