gpt4 book ai didi

typescript - 我可以在映射类型中提取可观察对象的类型吗?

转载 作者:搜寻专家 更新时间:2023-10-30 21:25:22 24 4
gpt4 key购买 nike

我有这个界面:

export interface MainEvents {
successful$: Observable<EventObject>;
notSuccessful$: Observable<EventObject>;
ended$: Observable<EventObject>;
}

我想制作一个使用相同键但不是 Observable<EventObject> 的类型应该是BehaviorSubject<EventObject>

我已经定义了我的类型:

 type SubjectsType = {
[P in keyof MainEvents ]: BehaviorSubject<MainEvents [P]>;
}

但它当然声明为 BehaviorSubject<Obserbable<EventObject>>而不是 BehaviorSubject<EventObject>

有没有一种方法可以自动提取类型 Type,以便最终我可以添加更多具有不同可观察类型的接口(interface)成员,或者我需要手动执行吗?

最佳答案

您可以使用 conditional types结合 infer 提取通用类型参数:

type SubjectsType = {
[P in keyof MainEvents]: BehaviorSubject<MainEvents[P] extends Observable<infer X> ? X : never>;
}

现在这将导致泛型类型参数作为值,或者 never 如果值不是 Observable 类型开始。

您还可以在 this typescript playground 中看到这一点。 .

您还可以使 SubjectType 通用,从而允许重用:

type SubjectsType<T> = {
[P in keyof T]: BehaviorSubject<T[P] extends Observable<infer X> ? X : never>;
}

type MainSubjectTypes = SubjectsType<MainEvents>;

关于typescript - 我可以在映射类型中提取可观察对象的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57592240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com