【问题标题】:How to create a Map to store Subject/BehaviorSubject of different data types如何创建地图来存储不同数据类型的主题/行为主题
【发布时间】:2018-12-27 16:16:58
【问题描述】:

在Typescript中,如何创建一个Map来存储不同数据类型的Subject/BehaviorSubject

在我的一个服务类中,我想要一个地图来存储不同数据类型的主题。 (地图的关键是数字)。如何声明地图?下面是示例代码

export class EventBusService {
private events: Map<number, Subject<????>>;
constructor() { }
public regsiterEvent<T>(id: number, initial: T): BehaviorSubject<T> {
if (this.events.has(id)) {
  throw new Error('The event id already exist ' + id);
 }

  const subject = new BehaviorSubject<T>(initial);
  this.events.set(id, subject);
  return subject;
 }
}

【问题讨论】:

    标签: typescript behaviorsubject subject-observer


    【解决方案1】:

    对不知道类型的变量使用any。或者 Object 如果您想转换为对象。

    private events: Map<number, Subject<any>>;
    

    Typescript data types

    编辑:

    如果要捕获类型,则必须使用返回类型的函数

    function identity<T>(arg: T): T {
       return arg;
    }
    var result = identity("hello generics"); // return 'string'
    

    I.E.在ajax请求中

    function getAsync<T>(url: string): Promise<T[]> {
       return fetch(url).then((response: Response) => response.json());
    }
    getAsync<Movie>("/movies").then(movies => {
        movies.forEach(movie => {
            console.log(movie.title);
        });
    });
    

    或者,您也可以在interface Array&lt;T&gt; 之类的接口声明中使用T,然后使用该接口进行强制转换。 但是你不能使用T 来声明变量,你必须使用any 来代替。

    Typescript Generics

    【讨论】:

    • 是的,主题 在这里工作,但我正在寻找基于泛型的解决方案。
    猜你喜欢
    • 2017-02-09
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2018-06-14
    相关资源
    最近更新 更多