首页 > 解决方案 > 如何为定义的接口赋值?

问题描述

我已经为我试图为客户端构建的响应定义了接口我看到data来自后端的响应,所以现在我试图为我的接口对象分配值,它即将到来未定义。不知道为什么会出现这个问题?

main.ts

  private async specialtyAccountBalanceResponse(@Body()data: IAccountBalanceSdkResult): Promise<any> {
      const saveDetails = {} as ICacheRequest;
      const specialtyResponse = {} as IGetAccountBalanceResponse;

      if (!data.Details && data.Header.StatusCode !== "0000") {
          return data.Header;
      }
      specialtyResponse.details.lineOfBusiness = "SPec";
      specialtyResponse.details.balanceAccount = data.Details.balanceAccount;
      return specialtyResponse;
  }

接口.ts

export interface IGetAccountBalanceResponse {
    header: any;
    details: IGetAccountBalanceDetails;
}

export interface IGetAccountBalanceDetails {
    lineOfBusiness: string;
    balanceAccount: string;
    payment: IPaymentIndicator;
}

export interface IPaymentIndicator {
    recentPaymentIndicator: string;
    recentPaymentAmount: string;
    achAuthRequiredInd: string;
}

标签: typescriptinterface

解决方案


在您的示例中,您创建了一个空对象:

const specialtyResponse = {} as IGetAccountBalanceResponse;

然后你尝试访问它的属性:

specialtyResponse.details.lineOfBusiness = "SPec";

details永远不会被实例化,所以它是undefined. 因此您无法访问它的属性lineOfBusiness

一种解决方案是使用@undefinedMayNotBeNull 建议的类。另一种方法是specialtyResponse.details在访问属性之前进行设置。

specialtyResponse.details = {} as IGetAccountBalanceDetails;

这是一个工作示例:

interface IGetAccountBalanceResponse {
    details: IGetAccountBalanceDetails;
}

interface IGetAccountBalanceDetails {
    lineOfBusiness: string;
    balanceAccount: string;
}

const specialtyResponse = {} as IGetAccountBalanceResponse;
specialtyResponse.details = {} as IGetAccountBalanceDetails;

specialtyResponse.details.lineOfBusiness = "SPec";
specialtyResponse.details.balanceAccount = "Test";

在 TypeScript Playground 上试试


更新

specialtyResponse可能是错字。你的意思是specialityResponse相反?


推荐阅读