0

在 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;
 }
}
4

1 回答 1

0

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

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

打字稿数据类型

编辑:

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

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

IE 在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);
    });
});

或者,您可以T在接口声明中使用interface Array<T>,然后使用该接口进行强制转换。但是你不能T用于变量声明,你必须使用它any

打字稿泛型

于 2018-12-27T16:22:51.177 回答