参数不能分配给我的界面类型

时间:2018-04-29 06:30:21

标签: angular typescript typescript-typings

我对Typescript很新,我有一个Angular项目,我有一个简单的界面:

IEmail {
   email_type:string,
   email_address:string
}

我有一个简单的方法,基本上比较两个数组的值,如果它在一个数组中找到一个等于另一个数组中的值的值,它会拼接出该值。

我用来做这个的代码是:

        this.contact.shared.emails.map((val)=> {
          this.profile.emails.indexOf(val.email_address) < -1 ? this.emailArray.splice(val, 1) : '';
        });

'val'的类型为

我的问题在于:

 this.profile.emails.indexOf(val.email_address) < -1 ? this.emailArray.splice(val, 1) : '';

我收到错误:(val.email_address),因为此值是<IEmail>接口类型的字符串参数。

所以我得到错误

  

'类型字符串的参数不能分配给参数类型   IEmail”。

我如何解决这个问题?

顺便说一下,我注意到我可以通过将界面中的参数类型更改为'any'vs'string'来消除该错误,但是会出现一个新的错误,其中的'val'行:

this.emailArray.splice(val, 1)

生成错误:“IEmail”类型的参数不能分配给“number”类型的参数。

3 个答案:

答案 0 :(得分:0)

更改如下, Array.splice 采用数字参数。

this.contact.shared.emails.map((val)=> {
     const ind = this.profile.emails.indexOf(val.email_address);
     this.profile.emails.indexOf(val.email_address) < -1 ? this.emailArray.splice(ind, 1) : '';
});

答案 1 :(得分:0)

你可以试试这个:

this.contact.shared.emails.map((val)=> {
let currentEmail:IEmail={};
for(let email of this.profile.emails){
    if(email.email_address === val.email_address){
        currentEmail = email;
        }
   }
this.profile.emails.indexOf(currentEmail) < -1 ? this.emailArray.splice(val, 1) : '';
        });

答案 2 :(得分:0)

这是解决方案:

          this.profile.emails = this.profile.emails.filter(e=>{
            return this.contact.shared.emails.find(e1 => e1.email_address===e.email_address) == null
          })