Свойство «emailAddress» не существует для типа «BaseModel».ts

avatar
user16619763
9 августа 2021 в 06:05
136
2
0

У меня есть функция, которая вызывает API из службы. Теперь я хотел сделать для каждого из res.items и проверить адрес электронной почты, но я не могу выполнить цикл, и я получаю сообщение об ошибке. Свойство «emailAddress» не существует. на типе 'BaseModel'.ts, который я не понимаю, почему.

Какая проблема вызывает это? почему это для каждого не работает? Есть идеи?

это пример данных из _transactionUserPageEvent enter image description here

#Служба компонента A

getUserProfileTableDropdown(
    id: number,
    page: number,
    pageSize: number,
    searchString: string,
    sortKey: string[],
    sortOrder: string[]
  ): Observable<PagedModel> {
    const params = new HttpParams()
      .set('id', id.toString())
      .set('page', page.toString())
      .set('pageSize', pageSize.toString())
      .set('searchString', searchString)
      .set('sortKey', JSON.stringify(sortKey) || '')
      .set('sortOrder', JSON.stringify(sortOrder) || '');
    return this.httpRequestService.get<PagedModel>(
      `${apiBaseUrl}/table/profiles`,
      params
    );
  }

#Компонент А Код ТС

private _transactionUserPageEvent() {
    this.isTransactionUserLoading = true;
    this.transactionUserTable.data = [];
    this._userProfileService.getUserProfileTableDropdown(
      this.accountId,
      this.transactionUserTable.pageIndex + 1,
      this.transactionUserTable.pageSize,
      this.searchTransactionUserInput.nativeElement.value,
      this.transactionUserTable.sortParams,
      this.transactionUserTable.sortDirs
    )
      .pipe(
        finalize(() => this.isTransactionUserLoading = false)
      )
      .subscribe({
        error: err => this._notificationService.showError(err),
        next: res => {
          console.log("new users"  , this.selectedNewUser)
          this.transactionUserTable.totalElements = res.totalItemCount;
          
          this.transactionUserTable.data = res.items as UserProfileDropdownDto[];
          
          this.totalData = res.totalItemCount;
          this.currentDisplayedData = res.lastItemOnPage;
          res.items.forEach(item => {
            if(item.emailAddress && selectedNewUser.findIndex(x => x.emailAddress === item.emailAddress) !== -1){
              item.checked = true;
            }
          });
        },
        complete: noop
      });
  }

#base-model.ts

export class BaseModel {
    // createdStr: string;
    // createdByUser: AuditUser;

    // modifiedStr: string;
    // modifiedByUser: AuditUser;
}


export class PagedModel {
firstItemOnPage: boolean;
lastItemOnPage: boolean;
totalItemCount: number;
items: BaseModel[];

constructor(isFirstPage: boolean, isLastPage: boolean, totalItems: number, itemList: BaseModel[]) {
    this.firstItemOnPage = isFirstPage;
    this.lastItemOnPage = isLastPage;
    this.totalItemCount = totalItems;
    this.items = itemList;
}

}

#dto код пользователя

export class UserProfileDropdownDto {
    id: number;
    fullName: string;
    roleDisplay: string;
    firstName:string;
    lastName:string;
    isChecked: boolean = false;
}
Источник
Suneel Kumar
9 августа 2021 в 06:11
0

имеет ли модель selectedNewUser свойство emailAddress? не могли бы вы поделиться данными об объекте?,

user16619763
9 августа 2021 в 06:13
0

@SuneelKumar Да, я думаю, что проблема связана с res.items, хотя я просто res.items.forEach(item => { console.log("item.emailAddress", item.emailAddress)}); он говорит, что свойство "emailAddress" не существует для типа "BaseModel".ts(2339)

Suneel Kumar
9 августа 2021 в 06:15
0

Да, я проверил ваш BaseModel выше, похоже, что у вас нет emailAddress в нем

user16619763
9 августа 2021 в 06:17
0

Если я добавлю emailAddress в BaseModel, это будет новая ошибка imgur.com/a/49VWHAo

Suneel Kumar
9 августа 2021 в 06:20
0

Хорошо! это из-за типа, который вы применили к getUserProfileTableDropdown(), так как тип ответа должен быть Observable<PagedModel>

Suneel Kumar
9 августа 2021 в 06:21
0

Если вы сосредоточитесь на PagedModel, свойство items имеет тип BaseModel[].

user16619763
9 августа 2021 в 06:21
0

Можешь пояснить, Сунил? что ты имеешь в виду ?

user16619763
9 августа 2021 в 06:21
0

как проблема будет решена

Suneel Kumar
9 августа 2021 в 06:22
0

Хорошо, подождите, позвольте мне поделиться с вами решением

user16619763
9 августа 2021 в 06:29
0

Хорошо @SuneelKumar, я подожду

Suneel Kumar
9 августа 2021 в 06:38
0

Я добавил ответ, пожалуйста, посмотрите

Ответы (2)

avatar
Suneel Kumar
9 августа 2021 в 06:35
0

Я не уверен в поведении вашей задачи, но я предположил, что вы хотите заполнить раскрывающийся список из ответа API, верно?

Для этого вы создали эту модель UserProfileDropdownDto и хотите заполнить эту модель как массив из ответа API, после чего вы можете использовать это внутри своего html,

Помня об этом scenarios, приведенное ниже решение может помочь вам

Пожалуйста, обновите модель UserProfileDropdownDto, как показано ниже

export class UserProfileDropdownDto extends BaseModel {
    id: number;
    fullName: string;
    roleDisplay: string;
    firstName:string;
    lastName:string;
    isChecked: boolean = false;
    emailAddress: string;
    ....
}

Просто убедитесь, что ваша модель UserProfileDropdownDto должна иметь свойства ответа API.

Теперь внесите исправления в вашу модель PagedModel следующим образом,

export class PagedModel {
  firstItemOnPage: boolean;
  lastItemOnPage: boolean;
  totalItemCount: number;
  items: UserProfileDropdownDto[];

constructor(
  isFirstPage: boolean, 
  isLastPage: boolean, 
  totalItems: number, 
  itemList: UserProfileDropdownDto[]
) {
    this.firstItemOnPage = isFirstPage;
    this.lastItemOnPage = isLastPage;
    this.totalItemCount = totalItems;
    this.items = itemList;
}
user16619763
9 августа 2021 в 06:42
0

Вы легенда, спасибо за помощь и идею, сэр.

Suneel Kumar
9 августа 2021 в 06:43
1

Пожалуйста!

user16619763
9 августа 2021 в 06:44
0

Кстати, последний вопрос, почему я получаю эту ошибку imgur.com/a/DiZMYjs на моем this.selectedNewUser ?? Сэр

user16619763
9 августа 2021 в 06:47
0

он говорит, что свойство "emailAddress" не существует для типа "Object".ts(2339)

Suneel Kumar
9 августа 2021 в 06:49
1

какой тип переменной selectedNewUser? Я думаю, это тип BaseModel

user16619763
9 августа 2021 в 06:50
0

Это образец данных imgur.com/a/MldPNP5 this.selectedNewUser

user16619763
9 августа 2021 в 06:51
0

У него есть сэр, пожалуйста, проверьте эти данные imgur.com/a/MldPNP5, у него есть свойство emailAddress

user16619763
9 августа 2021 в 06:51
0

@Input() selectedNewUser : Array<Object> = [];

Suneel Kumar
9 августа 2021 в 06:52
1

Хорошо, просто измените этот @Input() selectedNewUser : Array<Object> = []; на @Input() selectedNewUser : Array<any> = [];

user16619763
9 августа 2021 в 08:38
1

Спасибо, привет @Suneel, может быть, у вас есть идеи по этому вопросу coderhelper.com/questions/68709106/… Спасибо,

Suneel Kumar
9 августа 2021 в 08:58
1

Я проверил, а также ответил на ваш вопрос, пожалуйста, посмотрите

user16619763
9 августа 2021 в 12:41
0

Привет @Suneel, у вас есть идея с этим, сэр?

Suneel Kumar
9 августа 2021 в 12:47
0

С какой проблемой вы столкнулись?

user16619763
9 августа 2021 в 12:48
0

Я описываю проблему по ссылке stackblizt, сэр stackblitz.com/edit/free-qwm2y6

Suneel Kumar
9 августа 2021 в 12:50
0

Да, я проверил! но с какой реальной проблемой вы столкнулись?

user16619763
9 августа 2021 в 12:52
0

Я хотел заменить идентификатор ключа значением 0 и вставить ключ memberId со значением, равным первому значению идентификатора, прежде чем я сделаю его 0

Suneel Kumar
9 августа 2021 в 12:52
0

вам нужен код для достижения ожидаемого результата?

user16619763
9 августа 2021 в 12:53
0

да, сэр, если вы видите мой образец объекта в stackblizt, который является образцом данных, мне нужна помощь, как заменить идентификатор ключа значением 0 и вставить ключ memberId со значением, равным первому значению идентификатора, прежде чем я сделаю его 0

user16619763
9 августа 2021 в 12:57
0

Я хотел заменить идентификатор ключа на значение 0 и вставить ключ memberId со значением, равным первому значению идентификатора, прежде чем сделать его равным 0. Итак, сначала получите значение идентификатора teamMembersDto и вставьте ключ memberId со значением идентификатора, а затем замените идентификатор teamMembersDto на значение равно 0

Suneel Kumar
9 августа 2021 в 12:58
0

Хорошо! подождите, позвольте мне написать решение для вас!

Suneel Kumar
9 августа 2021 в 13:09
0

Проверьте мой другой ответ! я добавил сейчас

avatar
Suneel Kumar
9 августа 2021 в 13:08
0

На основании вашего комментария! У меня есть решение для другой проблемы

Текущий результат

let data = {
  "id": 0,
  "name": "adas",
  "description": "dasdas",
  "status": "",
  "teamMembersDto": [
      {
        "id": 120098,
        "fullName": "xsc@gmail.com xsc@gmail.com",
        "roleDisplay": null,
        "firstName": "xsc@gmail.com",
        "lastName": "xsc@gmail.com",
        "emailAddress": "xsc@gmail.com",
        "phoneNumber": "12",
        "companyName": "xsc@gmail.com",
        "title": "xsc@gmail.com",
        "lastLogin": null,
        "createdDate": "09/08/2021 7:44:56 am",
        "isVerified": false,
        "roleDto": null,
        "status": "Active",
        "securityRole": "Unlicensed User",
        "lastLoggedIn": "",
        "teamCount": 0,
        "transactionRoleList": null
      },
      {
        "id": 40091,
        "fullName": "yukre@gmail.com yukre@gmail.com",
        "roleDisplay": null,
        "firstName": "yukre@gmail.com",
        "lastName": "yukre@gmail.com",
        "emailAddress": "yukre@gmail.com",
        "phoneNumber": "232423",
        "companyName": "yukre@gmail.com",
        "title": "3434",
        "lastLogin": null,
        "createdDate": "06/08/2021 12:35:32 pm",
        "isVerified": false,
        "roleDto": null,
        "status": "Active",
        "securityRole": "Unlicensed User",
        "lastLoggedIn": "",
        "teamCount": 0,
        "transactionRoleList": null
      }
  ],
  "accountId": 4
}

Ожидаемый результат

let data = {
  "id": 0,
  "name": "adas",
  "description": "dasdas",
  "status": "",
  "teamMembersDto": [
      {
        "id": 0,
        "fullName": "xsc@gmail.com xsc@gmail.com",
        "roleDisplay": null,
        "firstName": "xsc@gmail.com",
        "lastName": "xsc@gmail.com",
        "emailAddress": "xsc@gmail.com",
        "phoneNumber": "12",
        "companyName": "xsc@gmail.com",
        "title": "xsc@gmail.com",
        "lastLogin": null,
        "createdDate": "09/08/2021 7:44:56 am",
        "isVerified": false,
        "roleDto": null,
        "status": "Active",
        "securityRole": "Unlicensed User",
        "lastLoggedIn": "",
        "teamCount": 0,
        "transactionRoleList": null,
        "memberId": 120098
      },
      {
        "id": 0,
        "fullName": "yukre@gmail.com yukre@gmail.com",
        "roleDisplay": null,
        "firstName": "yukre@gmail.com",
        "lastName": "yukre@gmail.com",
        "emailAddress": "yukre@gmail.com",
        "phoneNumber": "232423",
        "companyName": "yukre@gmail.com",
        "title": "3434",
        "lastLogin": null,
        "createdDate": "06/08/2021 12:35:32 pm",
        "isVerified": false,
        "roleDto": null,
        "status": "Active",
        "securityRole": "Unlicensed User",
        "lastLoggedIn": "",
        "teamCount": 0,
        "transactionRoleList": null
        "memberId": 40091
      }
  ],
  "accountId": 4
}

Решение

data.teamMembersDto = data.teamMembersDto.map((item) => {
  let id = item.id;
  return {
    ...item,
    id: 0,
    memberId: id
  }
});
user16619763
9 августа 2021 в 13:30
0

Спасибо за помощь оценил

user16619763
9 августа 2021 в 13:36
0

ваш ответ правильный, сэр, я ошибся, извините

Suneel Kumar
9 августа 2021 в 13:46
0

Нет проблем! не за что, пожалуйста, дайте мне знать, если вам нужна помощь, спасибо

user16619763
12 августа 2021 в 07:18
0

Привет @Suneel, у тебя есть идеи по этому вопросу? coderhelper.com/questions/68753148/… . Спасибо.

Suneel Kumar
12 августа 2021 в 07:38
0

Привет, @JellynAng! Конечно, позвольте мне проверить

Suneel Kumar
12 августа 2021 в 07:49
0

@ДжеллинЭнг! пожалуйста, проверьте мой ответ