typescript 对象可能是'undefined'不应该抛出错误,因为上面有一个rxjs过滤器

xzlaal3s  于 2023-10-22  发布在  TypeScript
关注(0)|答案(1)|浏览(161)

我目前正在重构我的一个服务,遇到了一个相当烦人的问题。我有一个API,它返回一个带有多个可选属性的对象。当我想使用属性时,我首先必须检查这个属性是否未定义,否则我会得到一个错误。这可以用if语句来实现。在重构之后,我考虑将检查放在过滤器操作符中。这应该可以工作,并且只获取具有所需属性的对象,但现在linter仍然抛出错误。

interface OptionalObject {
  values?: number[]
}

const obs$$ = new BehaviorSubject<OptionalObject>({});
obs$$.pipe(
  filter((val) => !!val.values),
  map((val) => val.values.length) // Object is possibly 'undefined'
).subscribe(() => {

});

我认为我的项目使用ESLint
我尝试了一个if,它的工作,但我希望它与过滤器的Rxjs

cwxwcias

cwxwcias1#

解决方案是使用TypeScript TypeGuard:

interface OptionalObject {
  values?: number[];
}

const obs$$ = new BehaviorSubject<OptionalObject>({});
obs$$
  .pipe(
    filter((val): val is {values: number[]} => !!val.values),
    map((val) => val.values.length)
  )
  .subscribe(() => {});

相关问题