У меня есть функция, которая вызывает API из службы. Теперь я хотел сделать для каждого из res.items и проверить адрес электронной почты, но я не могу выполнить цикл, и я получаю сообщение об ошибке. Свойство «emailAddress» не существует. на типе 'BaseModel'.ts, который я не понимаю, почему.
Какая проблема вызывает это? почему это для каждого не работает? Есть идеи?
это пример данных из _transactionUserPageEvent
#Служба компонента 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;
}
имеет ли модель
selectedNewUser
свойство emailAddress? не могли бы вы поделиться данными об объекте?,@SuneelKumar Да, я думаю, что проблема связана с res.items, хотя я просто res.items.forEach(item => { console.log("item.emailAddress", item.emailAddress)}); он говорит, что свойство "emailAddress" не существует для типа "BaseModel".ts(2339)
Да, я проверил ваш
BaseModel
выше, похоже, что у вас нетemailAddress
в немЕсли я добавлю emailAddress в BaseModel, это будет новая ошибка imgur.com/a/49VWHAo
Хорошо! это из-за типа, который вы применили к
getUserProfileTableDropdown()
, так как тип ответа должен бытьObservable<PagedModel>
Если вы сосредоточитесь на
PagedModel
, свойство items имеет типBaseModel[]
.Можешь пояснить, Сунил? что ты имеешь в виду ?
как проблема будет решена
Хорошо, подождите, позвольте мне поделиться с вами решением
Хорошо @SuneelKumar, я подожду
Я добавил ответ, пожалуйста, посмотрите