【问题标题】:Variable 'test' is used before being assigned在分配之前使用变量“test”
【发布时间】:2021-09-10 08:40:22
【问题描述】:

从下面我的代码sn-p:


export const testIt = (): {
  testPeople: IPeople[];
} => {
  const personId = "Peter03";

// This line has "Variable 'test' is used before being assigned" error:
  let test: IPeople; 
  const clone = {...test};

  getPeopleInfo(personId)
    .then(person => {
      clone.id = person.id;
    });
  const testPeople: IPeople[] = [];

  if (clone) {
    testPeople.push(clone);
  }
  return { testPeople };
};

我尝试将 test 设置为空:“let test: IPeople = {}”。

但我收到一个新错误“类型“{}”缺少类型“PersonInformation”中的以下属性:电话号码、ID、地址和另外 5 个。”

(我这里有一个克隆是因为 IPeople 的属性是只读的。)

有没有办法解决这个错误?

【问题讨论】:

  • 你从来没有给test分配任何东西,它的目的是什么?
  • 为什么要在test初始化之前克隆它?

标签: typescript


【解决方案1】:

您将test 定义为一个变量,但没有为其分配任何值,因此当您在下一行中使用它时它是未定义的:

  let test: IPeople; 
  const clone = {...test};

您需要将其定义为:

  let test: IPeople = { name: "Jim" }; 
  const clone = {...test};

test 从来没有分配给任何东西,也没有被使用过,所以我不确定它的目的是什么!

您是否想从承诺中“获取”该信息,因此尝试将其分配给test/clone 对象?如果这是本意,代码还有其他一些严重的问题。

Promise 是异步的,即它们“稍后发生”。因此,您在 then 中的函数可能会在其余代码完成后发生。

您的代码将运行,创建clone 变量(未分配),不将其推送到数组,因为它未分配,然后then(person => { 函数将运行,分配克隆变量,在“完成”函数中.调用该函数的代码将得到一个空数组!

你想返回一个Promise<IPeople[]>,所以函数的调用者可以等待响应。

【讨论】:

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