让我们说:
private userSource = new BehaviorSubject<UserType1 | UserType2>({});
最终返回一个UserType3
或动态类型,它可以是一个特定类型,但需要在过程中达成共识。
是否可以将BehaviourSubject的返回类型强制转换为其他类型?
答案 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;
}
}