使用严格的空检查处理Typescript 2.0中的数组移位返回类型

时间:2016-12-09 20:55:59

标签: typescript typescript2.0

在我的带有严格空检查的Typescript 2.0项目中,我有一个数组:

private _timers: ITimer[]

和if语句:

if(this._timers.length > 0){
  this._timers.shift().stop();
}

但是我收到了编译错误:

Object is possibly 'undefined'

我怎样才能说服编译器它未被定义?

我可以像这样绕过它:

const timer = this._timers.shift();
if(timer){
  timer.stop();
}

但这似乎有点过于冗长,而且不必要地使用变量来解决输入限制。

由于

2 个答案:

答案 0 :(得分:5)

non-null assertion operator,在2.0发行说明中提到(并将出现在documentation soon中),适用于与此类似的情况。它的后缀!,它会抑制此错误:

    if(this._timers.length > 0){
        this._timers.shift()!.stop();
    }

另见https://stackoverflow.com/a/40350534/43848

答案 1 :(得分:1)

您确定_timers已初始化吗? 例如:

private _timers: ITimer[] = [];

或者在构造函数中:

constructor() {
    this._timers = [];
    ...
}