我对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”类型的参数。
答案 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
})