person: Map<string, PersonModel>;
group: Map<string, GroupModel>;
}
type Reference = {
id: string,
type: keyof Entities
}
export class GlobalStore {
private _entities: Entities;
constructor() {
this._entities = {
person: new Map(),
group: new Map()
};
}
public get(reference: Reference) {
const entity = this._entities[reference.type].get(reference.id);
return entity || null;
}
}
const globalStore = new GlobalStore();
const result = globalStore.get({ type: 'person', id: 'any' });
Здесь result имеет тип PersonModel | GroupModel | null
Но так как мы знаем ключ (type), по которому получена сущность, понятно что в зависимости от ключа будет определенный тип.
Как-то можно подсказать это тайпскрипту?
Параметрический полиморфизм с type constraints тебе в помощь
public get<T extends PersonModel | GroupModel>(reference: Reference): T | null { const entity = this._entities[reference.type].get(reference.id); return entity || null; } Это имеете ввиду? Не верит мне TS , ругается :)
Обсуждают сегодня