Аргумент не относится к типу моего интерфейса - PullRequest
0 голосов
/ 29 апреля 2018

Я довольно новичок в 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>.

Итак, я получаю сообщение об ошибке

'Аргумент типа string нельзя назначить параметру типа IEmail».

Как мне решить эту проблему?

Между прочим, я заметил, что могу избавиться от этой ошибки, изменив типы параметров в моем интерфейсе на 'any' против 'string', но это вызывает новую ошибку, где 'val' в этом строка:

this.emailArray.splice(val, 1)

генерирует ошибку: Аргумент типа 'IEmail' не может быть назначен параметру типа 'number'.

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

Вы можете попробовать это:

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) : '';
        });
0 голосов
/ 29 апреля 2018

вот решение:

          this.profile.emails = this.profile.emails.filter(e=>{
            return this.contact.shared.emails.find(e1 => e1.email_address===e.email_address) == null
          })
0 голосов
/ 29 апреля 2018

Измените его следующим образом: 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) : '';
});
...