【问题标题】:Argument is not assignable to type of my interface参数不可分配给我的界面类型
【发布时间】:2018-10-09 13:45:21
【问题描述】:

我是 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),因为此值是&lt;IEmail&gt; 接口类型的字符串参数。

所以我得到的错误是

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

我该如何解决这个问题???

顺便说一句,我确实注意到我可以通过将界面中的参数类型更改为“any”与“string”来消除该错误,但这会带来一个新错误,其中的“val”行:

this.emailArray.splice(val, 1)

产生错误:'IEmail' 类型的参数不可分配给'number' 类型的参数。

【问题讨论】:

  • 谢谢,fateme,但这没有用。同样的错误...
  • 第二个错误是因为val是'IEmail'类型而splice()需要number
  • 分两步做,先得到indexof再拼接那个数字

标签: angular typescript typescript-typings


【解决方案1】:

改成如下,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) : '';
});

【讨论】:

  • 嗨 Sajeetharan,您的代码似乎已经解决了类型错误,但由于某种原因 ind 始终返回 -1,尽管我的测试中有两个电子邮件地址。
  • 您需要检查您的数组 this.profile.emails 或尝试使用 .includes 方法
  • 我在每一行上运行 console.logs,可以看到两个数组中都有相同的电子邮件。如何使用 include 方法找到重复电子邮件的位置并将其拼接出来?
  • 你能把你看到的东西贴上console.log(JSON.stringify(this.profile.emails));
【解决方案2】:

你可以试试这个:

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) : '';
        });

【讨论】:

    【解决方案3】:

    解决办法如下:

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

    【讨论】:

      猜你喜欢
      • 2019-06-24
      • 2021-06-14
      • 2020-11-20
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 2018-08-10
      • 2021-02-03
      相关资源
      最近更新 更多