angular - 将 BehaviourSubject 的输出转换为不同的类型
问题描述
假设我们有:
private userSource = new BehaviorSubject<UserType1 | UserType2>({});
最终返回一个UserType3
或者可能是动态的类型,它可以是一个特定的类型,但需要在过程中达成一致。
是否可以将 BehaviourSubject 的返回类型转换为不同的类型?
解决方案
首先想到的是使用有区别的联合。
主要思想是您将拥有一个类型的联合,并且所有这些类型都将拥有一个共同的单例类型。
简而言之,这就是它允许您执行的操作:
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;
}
}
推荐阅读
- ios - 在新 ViewController 中隐藏 tabBar 时的 iOS 自动布局问题
- ios - iOS Swift - URLSession.dataTask 在第一次调用后不调用回调方法
- npm - NPM :配置为使用 github oauth 令牌
- android - 是否可以从 pc2 访问 pc1 上的 android 模拟器?
- javascript - React SSR根据API响应动态导入组件
- c - 带有 C 模块和错误 2732 的 C++ DLL 项目
- android - 在隐藏软按钮导航栏上,状态栏在右侧保留未覆盖的空间
- java - 在 Selenium with Java 中,如何取消选中某些复选框?
- r - 使用 type = MPI 的“doParallel”包和直接使用 doMPI 有什么区别?
- docker - Docker:添加卷