Angular 无法将类型分配给角度为的字符串

Angular 无法将类型分配给角度为的字符串,angular,typescript,Angular,Typescript,嘿,伙计们,我需要帮助,我无法将字符串属性推送到键、值数组; 我有 selRoles!:阵列; //然后我尝试将role.names映射到类型化数组。因为map函数返回的数组没有类型名? this.selRoles=data.roles.map(role=>role.name); //下面是我的subscribe方法,它返回一些rest数据 this.userService.getUserById(this.id).subscribe(数据=>{ 这个用户=数据; //我还尝试将forEach与

嘿,伙计们,我需要帮助,我无法将字符串属性推送到键、值数组; 我有

selRoles!:阵列;
//然后我尝试将role.names映射到类型化数组。因为map函数返回的数组没有类型名?
this.selRoles=data.roles.map(role=>role.name);
//下面是我的subscribe方法,它返回一些rest数据
this.userService.getUserById(this.id).subscribe(数据=>{
这个用户=数据;
//我还尝试将forEach与这样的类型一起使用
data.roles.forEach(role=>this.selRoles.push({name:role.name}));
log(“selRoles”+this.selRoles.forEach(item=>item.name));
}, 
error=>console.log(错误)
)
总有一个错误,VC代码描述如下 “string”类型的参数不能分配给“{name:string;}”类型的参数。ts(2345)


如何将类型指定为字符串的属性?你能帮我吗。非常感谢。谢谢你的代码有两个问题。首先,this.selRoles.forEach返回void。其次,data.roles.map(role=>role.name)我将返回[“string”,“string”,“string”],您需要更改它

以下是您需要做的:

selRoles!:数组;
this.selRoles=data.roles.map(role=>{return{name:role.name}});
this.userService.getUserById(this.id).subscribe(数据=>{
这个用户=数据;
data.roles.forEach(role=>this.selRoles.push({name:role.name}));
log(“selRoles”+this.selRoles.map(item=>item.name).join(“,”);
}, 
error=>console.log(错误)

)
您的
.map()
调用返回一个字符串数组,但您需要一个具有属性
名称的对象数组
data.roles.map(role=>{name:role.name});
。或者您可以将typehint改为array。您好,是的,我尝试了:this.selRoles=data.roles.map(role=>{name:role.name});但编译器仍然说:Type'void[]'不能赋值给Type'{name:string;}[]'。呃,是的,我打错了。你需要一个return语句,否则解释器会认为{}是一个功能块,而不是一个对象。下面的答案是正确的。是的,这是我需要的拼图和平。您正确地识别了它。但是,当我尝试推送我的selRoles变量时,出现了另一个问题,该变量包含名称:strings.this.user.roles.push(this.selRoles.map(role=>role.name));类型为“()=>string)[]”不能分配给类型为“{name:string;}”的参数。类型“(()=>string)[]”中缺少属性“name”,但类型“{name:string”中需要属性“name”;请尝试:this.user.roles.push(…this.selRoles.map(role=>{return name:role.name}))是的,spread操作员是失踪的和平者如果这些东西对你有用,你能记下我的答案吗?
         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)
)