Arrays 我该如何保护一个流行音乐?

Arrays 我该如何保护一个流行音乐?,arrays,typescript,strict,Arrays,Typescript,Strict,我使用的是严格模式。我有以下代码: const a: string[] = []; // something that fills `a` while (a.length > 0) { const i: string = a.pop(); // Error on this line console.log(i); // maybe add something else to `a` } 在本例中,我得到了一个错误,因为pop的返回类型为string | null。这对于一

我使用的是严格模式。我有以下代码:

const a: string[] = [];
// something that fills `a`
while (a.length > 0) {
  const i: string = a.pop();  // Error on this line
  console.log(i); 
  // maybe add something else to `a`
}

在本例中,我得到了一个错误,因为
pop
的返回类型为
string | null
。这对于一般使用
pop
方法是有意义的,但我要防止这种情况发生?有没有更多的typescript方法来获得合适的typeguard


我不能在数组上循环(例如,使用
of
),因为有时
a
会在循环过程中添加新项,并且语义不一样。

为什么不在弹出前检查弹出数据

if (a[a.length -1]) {
    const i: string = a.pop()
}
a.pop()

使用:
const i=a.pop()怎么样?“但我在防范这种情况?”——是的,你是,但TypeScript不知道这一点。弄清楚某个代码路径是否可能导致
null
相当于解决停止问题,因此是不可能的。您只能对一些简单的事情执行此操作,例如
const-topOfStack=a.pop();如果(topOfStack!==null){/*TypeScript知道topOfStack是非null的*/}
@CRice,这是一个很好的解决办法,因为它不能保护它,但这不是问题所在。
不是一个守卫,它是一个断言。我正在寻找一名警卫(我认为这是正确的说法)@JörgWMittag我能理解,发现所有案件是不可能的。我想知道是否有typescript支持受保护的pop的情况。i、 e.pop有内置防护装置的地方。显然,检查长度是不够的。还有什么可以用的吗?您已经为结果类型建议了一个操作后保护,它很接近,但是对于我的案例来说,它没有那么干净。不起作用
a.pop()
仍然是
string |未定义的
,这与我所拥有的几乎完全相同。