在TypeScript中,是否有可能解开可选/可空值?

6

我习惯于使用Swift的可选值,并且发现TypeScript有类似的东西。对于像属性的延迟初始化这样的事情,拥有一个可为空的私有属性和一个公共的getter,在请求时初始化该值会很不错。

class Test {
   private _bar: object:null = null;
   get bar(): object {
       if (_bar === null) {
           _bar = { };
       }
       return _bar;
   }
}

我知道我可以使用undefined来达到这个目的,并删除私有成员的可空类型信息,但我想知道是否有一种方法可以在不必一直携带该属性的null值的情况下完成此操作。 我正在从需要处理空值的地方到一个不再希望强制任何人处理可空值的界限。
1个回答

2
您可以在TypeScript中这样做:
class Test {
  private _bar?: object;
  get bar(): object {
    if (this._bar === undefined) {
        this._bar = { };
    }
    return this._bar;
  }
}

通常在TypeScript中,使用undefined而不是null更符合惯用语。

是的,目前我自己已经这样做了,但我认为仍然有一些情况下null更合适或者是有效的值,并且你想在某个时候将其转移到不再可空的值。 - kvn
不确定你的意思,请举个例子?如果你想使用 null 而不是 undefined,也可以这样做。如果你不想将值标记为可选,则需要给它赋一些值。 - Art
4
在Swift中,如果一个值是可选的,但我想将其解包以便从现在开始它不再是可选的,我只需使用 if let nonOptVal = optVal {} 或者我可以使用 guard let nonOptVal = optVal else { throw err },然后数据就存储在非可选变量 nonOptVal 中,假设值存在,我可以使用它。我想知道Typescript中是否有相当的方法。到目前为止,我唯一的解决方法是将类型转换为不包括 |undefined|null 的类型。 - kvn
1
@Kevin 这是我一直在做的:if ((value = this.optionalValue) != undefined) { console.log(value+" 是有效的") } - gabriel_vincent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接