首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >变量'value‘在赋值之前使用。

变量'value‘在赋值之前使用。
EN

Stack Overflow用户
提问于 2021-11-19 02:59:56
回答 2查看 1.4K关注 0票数 5

我的代码:

代码语言:javascript
运行
复制
function test() {
  let value: number;

  for (let i = 0; i < 10; i++) {
    value = i;
    console.log(value);
  }

  return value;
}

test();

得到了这个:

代码语言:javascript
运行
复制
Variable 'value' is used before being assigned

我发现这很奇怪,因为我看到了其他类似的问题,它们要么使用回调,要么使用允诺,或者使用其他异步方法,而我只使用同步for循环。

代码语言:javascript
运行
复制
function test() {
  let value: number;

  for (let i = 0; i < 100; i++) {
    // a() is very expensive and with some effects
    const result = a(i)

    if(i===99) {
      value = result
    }

  }

  return value;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-19 03:04:49

使用非空断言运算符确保“在类型检查器无法得出该事实的上下文中,其操作数为非空操作数和非定义操作数。”

代码语言:javascript
运行
复制
function test() {
  let value!: number;

  for (let i = 0; i < 10; i++) {
    value = i;
    console.log(value);
  }

  return value;
}

test();

结果

票数 7
EN

Stack Overflow用户

发布于 2021-11-19 03:05:24

TypeScript不能推断循环体中的任何东西都在运行--它不检查i是否从0开始,条件是i < 10,因此身体至少会运行一次。此行为非常类似于以下内容:

代码语言:javascript
运行
复制
function test() {
  let value: number;
  if (Math.random() < 0.5) {
    value = 5;
  }
  return value;
}

这会产生同样的错误。

要想让TS知道值确实是在末尾定义的,您需要使它完全明确。通常,实现这一目标的最佳方法是使用const,通过数组方法和助手函数一次定义变量并将其赋值-- TS在最小化重新分配时效果最好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70029328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档