У меня проблема с Typescript, и я не знаю, как ее решить ...
Я создал общее состояние c для управления несколькими объектами. У каждой сущности есть собственный интерфейс, и каждый из них является частью универсального типа c (в моем примере это называется Reference).
Что я хочу: когда кому-то нужно вывести сущность из этого состояния, он указывает требуемый интерфейс в методе select
(или selectReference
?) И Typescript проверяет, является ли данный интерфейс частью Reference
псевдоним типа.
Мои интерфейсы и псевдоним типа:
export interface A { propA: string; onch: string }
export interface B { propB: number; foo: boolean; hehe: string }
export interface C { propC: string; bar: number }
export interface D {}
export type Reference = A | B | C
Мой селектор:
export const selectReference = () => createSelector(selectRef, adapter.getSelectors().selectAll); // selectRef return an EntityState<Reference>
Мой компонент:
export class MyComponent {
collection$: Observable<Array<A>>;
getCollection(): void {
this.collection$ = this.store.pipe( select(fromReferencesSelectors.selectReference());
}
}
В этом примере ts linter показывает эту ошибку: Type 'Reference' is not assignable to type 'A'
.
Как я могу это сделать?
Заранее спасибо:)