【问题标题】:Variable is used before being assigned with fetch在分配 fetch 之前使用变量
【发布时间】:2021-08-16 14:40:21
【问题描述】:

Typescript 在我的函数的倒数第二行抛出以下错误:

变量“organizationInfoResponse”在被分配之前使用。

我不太确定如何忽略这个问题,因为我在 fetch 的 try catch 块内分配了 organizationInfoResponse。请您在这里指出正确的方向吗?

interface OrganizationInfoResponse {
  organization_name: string;
  organization_id: string;
  errorCode?: string;
}

export const handleGetOrganization = async (
  organizationName: string,
): Promise<OrganizationInfoResponse> => {
  let organizationInfoResponse: OrganizationInfoResponse;

  try {
    const rawRes = await fetch(
      `/sometestendpoint/${organizationName}`,
      {
        method: 'GET',
        headers: {
          'Content-Type': 'application/json',
        },
      },
    );

    organizationInfoResponse = await rawRes.json();

    if (rawRes.status >= 400) {
      if (organizationInfoResponse.errorCode === ErrorCodes.INVALID_ORG_NAME) {
        throw new Error('Given Organization Name is invalid');
      }
    }
  } catch (error) {
    // Do something
  }

  return organizationInfoResponse;
};

【问题讨论】:

  • 尝试像let organizationInfoResponse: OrganizationInfoResponse | undefined = undefined 那样为organizationInfoResponse 赋值。您正在设置它的值 try-catch 块,因此可能存在捕获的情况,然后您尝试返回未分配的值
  • 这是应该在 Typescript 中解决的方式,还是处理这些错误的“hacky”方式。
  • 我更新了评论并解释了案例。这不是一个 hacky 解决方案 :)
  • 这是否意味着我需要将返回的类型更新为Promise&lt;OrganizationInfoResponse | undefined&gt;?如果我不这样做,我可以看到Type 'undefined' is not assignable to type 'OrganizationInfoResponse'.。
  • 是的,就是这个意思。您需要更新返回值,因为如果它捕获,将返回 undefined

标签: javascript typescript


【解决方案1】:

如果您没有返回有效的OrganizationResponseInfo 并且没有引发错误,则应该/必须将返回类型更改为可为空。 => Promise&lt;OrganizationResponseInfo?&gt;

【讨论】:

  • 或者...你返回一些有效的东西而不是改变返回类型。
  • 是的,但如果你无法获取它,那将没有多大意义......但是,理论上返回默认值是一种选择
  • @VLAZ 返回有效的东西到底是什么意思?
  • @LazioTibijczyk 满足您的类型的东西。在您的情况下,某些对象是有效的OrganizationInfoResponse,例如{ organization_name: "--NOT FOUND--", organization_id: "" }
【解决方案2】:

正如我在评论中提到的,您正在为 try-catch 块内的 organizationInfoResponse 变量赋值,然后在函数结束时返回。如果它捕获错误,您的变量将不会获得分配给它的任何值,因此无法返回。您只需要在声明时为其分配一些值

【讨论】:

    猜你喜欢
    • 2019-11-06
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 2019-01-19
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    相关资源
    最近更新 更多