typescript error属性没有初始值设定项,并且未在构造函数中明确赋值

5m1hhzi4  于 2023-01-10  发布在  TypeScript
关注(0)|答案(1)|浏览(404)

我工作的Angular 13应用程序,我面临的问题时,声明类型模型的变量.
error属性没有初始值设定项,并且未在构造函数中明确赋值
为类型模型itemData声明items变量时出错,如下所示:

items:ItemsData[]

模型项数据

export interface ItemsData {
    id:number;
    itemNameER:string;
    itemNameEN:string;
    description:string;
}

component.ts

export class ItemsComponent implements OnInit {

 items:ItemsData[];
  
  constructor(private erpservice:ErpServiceService) { }

  
  retrieveAllItems(pageNumber: number = 0): void {
    this.erpservice.getAll(pageNumber)
      .subscribe(
        data => {
        this.items=data.items;
          console.log(data);
        });
  }

}

我需要接收我创建的itemsData模型上的函数retrieveAllItems返回的结果,但它给了我错误。
那么如何解决这个问题,为什么会出现这个问题?

    • 更新帖子**

在此行上获取retrieveAllItems函数结果时仍有问题

this.items=data.items;

类型itemdata上不存在属性项
那么我该怎么做来解决这个问题呢?
console.log(data);数据返回如下:

{
    "items": [
        {
            "id": 3,
            "itemNameEN": "pen"
        },
        {
            "id": 4,
            "itemNameEN": "pencil"
        },
        {
            "id": 5,
            "itemNameEN": "pen2"
        }
    ],
    "pager": {
        "numberOfPages": 1,
        "currentPage": 1,
        "totalRecords": 3
    }
}

service.ts

getAll(pageNumber: number): Observable<ItemsData> {
    let params = new HttpParams();

    if (pageNumber)
      params = params.append('pageNumber', pageNumber);

    let httpOptions = {
        params: params
    };
    return this.http.get<ItemsData>(baseUrl,httpOptions);
  }
5kgi1eie

5kgi1eie1#

    • 关于您的第一期**

发生这种情况的原因是您尚未使用值初始化items
解决此问题的方法有以下几种:

items: ItemsData[] = []; // Initialization with an empty array
items?: ItemsData[]; // Declaration as an optional variable
items!: ItemsData[]; // Declaration as non-nullable which basically corresponds to 'items: ItemsData[] = undefined'
    • 关于您的第二期**

根据你的方法签名,getAll()返回Observable<ItemsData>,但是这与你给我看的json-response不对应,它实际上返回类似Observable<DataWrapper>的东西,然后你应该定义一个附加模型,看起来像这样:

export interface DataWrapper {
  items: ItemsData[];
}

那么service.ts将如下所示:

getAll(pageNumber: number): Observable<DataWrapper> {
    let params = new HttpParams();

    if (pageNumber)
      params = params.append('pageNumber', pageNumber);

    let httpOptions = {
        params: params
    };
    return this.http.get<DataWrapper>(baseUrl,httpOptions);
}

相关问题