Как создать карту для хранения Subject / BehaviorSubject разных типов данных - PullRequest
0 голосов
/ 27 декабря 2018

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

В одном из моих классов сервисов я хочу иметь Map для хранения Subject разных типов данных.(Ключом карты является номер).Как мне объявить карту?Ниже приведен пример кода

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 Ответ

0 голосов
/ 27 декабря 2018

Используйте 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.

Обобщение машинописи

...