将行为的输出强制转换为其他类型

时间:2019-09-05 15:56:00

标签: angular typescript types rxjs

让我们说:

private userSource = new BehaviorSubject<UserType1 | UserType2>({});

最终返回一个UserType3或动态类型,它可以是一个特定类型,但需要在过程中达成共识。

是否可以将BehaviourSubject的返回类型强制转换为其他类型?

1 个答案:

答案 0 :(得分:2)

首先想到的是使用Discriminated Unions

主要思想是您将拥有一个类型联合,并且所有这些类型都将具有共同的singleton type

简而言之,这就是您可以执行的操作:


interface UserTypeOne {
  type?: 't1';
  name: string;
  age:  number;
}

interface UserTypeTwo {
  type?: 't2'
  address: {
    street: string
  }
  city: string;
}

interface UserTypeThree {
  type?: 't3';
  hobbies: string[];
}

/* ... */

type Users = UserTypeOne | UserTypeTwo | UserTypeThree;

/* ... */

const userSource$ = new BehaviorSubject<Users>(null);

/* ... */

switch (u.type) {
      case "t1": {
        console.log('type1', u.age, u.name)

        return;
      }

      case "t2": {
        console.log('type2', u.city, u.address.street)

        return;
      }

      case "t3": {
        console.log('type3', u.hobbies)

        return;
      }      
    }

Here is a StackBlitz demo

相关问题