function example(queue: number[]): number[] {
const curLength: number = queue.length
for (let i = 0; i < curLength; i++) {
**const cur: number = queue.shift()**
};
}
错误是星号所在的地方。使用if语句来检查未定义将是多余的,因为从代码中可以很清楚地看到,cur
不能是undefined
,因为我迭代了队列的长度。
在这种情况下,解决错误的合适方法是什么?
原因是shift()
可以返回元素(anumber
),或者如果数组为空(源)则返回undefined
。在此例中,签名为shift() : number | undefined
。一个好的IDE,或者Typescript Playground,会告诉你这些。
如果数组为空,编译器无法确定语句不会被执行,因此它仍然可以解释shift()
返回undefined
的情况。但是,作为一个开发人员,如果你确信你的程序是正确的,你可以告诉编译器,你知道这个函数调用永远不会返回undefined
,方法是把!
("非空断言操作符",更多信息在这里)附加到有问题的表达式:
const cur: number = queue.shift()!;
或者改变cur
:
const cur : number | undefined = queue.shift();