Как создать карту для хранения 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>>;
РЕДАКТИРОВАТЬ:
Если вы хотите захватить тип, вы должны использовать функцию, которая возвращает тип
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
вместо.