【问题标题】:Return false instead of undefined返回 false 而不是 undefined
【发布时间】:2021-06-04 11:25:32
【问题描述】:

在我拥有的 Angular 11 / Typescript 应用程序上:

authorize(policy: Policy) : Observable<boolean> {

  switch(policy) { 

    case Policy.Admin: 

      return zip(this.authenticationService.isSignedIn(), this.user$).pipe(
        map(([isSignedIn, user]: [boolean, UserModel]) => 
          isSignedIn 
          && 
          user?.claims?.some((claim: Claim) => claim.value === 'Admin'))
      );

userObservable&lt;UserModel&gt; 类型,isSignedInObservable&lt;boolean, undefined&gt; 类型。

当我构建应用程序时出现错误:

Type 'Observable<boolean | undefined>' is not assignable to type 'Observable<boolean>'

我不想返回未定义的。我宁愿返回 false 而不是 undefined。

我该怎么做?

【问题讨论】:

  • 我很确定如果 user 未定义,user? 将返回未定义,这可能是 undefined 的来源。在这些情况下,您可以尝试对 undefined 进行一些检查并返回 false

标签: angular typescript rxjs observable angular11


【解决方案1】:

用布尔值结束你的地图...

  const isSignedIn$ = this.authenticationService.isSignedIn();
  const user$ = this.user$;

  return zip(isSignedIn$, user$).pipe(
    map(([isSignedIn, user]: [boolean, UserModel]) => {
        const hasAdminRole = user?.claims?.some((claim: Claim) => claim.value === 'Admin');
        
        return !!(isSignedIn && hasAdminRole);
    })
  );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2014-10-26
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多