Как создать карту для хранения Subject/BehaviorSubject разных типов данных

В Typescript, как создать карту для хранения 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;
 }
}

1 ответ

Использование any для переменных, которые вы не знаете тип. Или же Object если вы хотите использовать его как объект.

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

Типы данных Typescript

РЕДАКТИРОВАТЬ:

Если вы хотите захватить тип, вы должны использовать функцию, которая возвращает тип

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 вместо.

Typescript Generics

Другие вопросы по тегам