.shift() 是否有可能返回未定义?
P粉461599845
P粉461599845 2024-02-03 19:55:25
[JavaScript讨论组]

我正在编写一个 TypeScript 函数,我的 IDE 告诉我,.shift() 的结果可能是未定义的,这会导致更多类型警告......

这是代码:

function accumulateProofs(
  proofs: Proof[],
  requiredAmount: Number,
  strategy: 'middle' | 'ascending' | 'descending',
): Proof[] {
  const result:Proof[] = [];
  const temp = proofs.slice();
  let total = 0;
  switch (strategy) {
    case 'middle': {
      while (temp.length && total < desired) {
        const first = temp.shift();
        total += first.amount;
        result.push(first);
        if (total >= desired) {
          break;
        }
        const last = temp.pop();
        total += last;
        result.push(last);
      }
    }
  }
  return result
}

现在我明白,当您无法确定数组中是否有任何元素时,此警告是有意义的,在这种情况下 .shift() 将返回未定义。但在这种情况下,我的 while 循环仅在 temp.length 为真时运行,在这种情况下我知道 temp.shift() 将返回一个值而不是未定义...我错过了什么吗?

P粉461599845
P粉461599845

全部回复(1)
P粉668804228

shift 被定义为 Array 的通用方法,并具有以下签名:

Array<T>.shift(): T |未定义

因此,无论您的代码是否针对 temp.length 断言,当您调用 shift 时,您都必须期望返回类型:

T |未定义

您只需添加一个默认值:

const first = temp.shift() || { amount: 0 }

对于 temp.pop() 也是如此。

这里是ts-游乐场

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号