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 |未定义的
,这与我所拥有的几乎完全相同。