Я хочу знать, возможно ли использовать дженерики (Typescript) в Angular Route любым возможным способом.
Лучше всего было бы, если бы я мог использовать дженерики с самим компонентом:
// the route:
{
path: 'user-a',
component: UserComponent<UserA> // other routes will use UserB and UserC
}
// the component:
@Component({...})
export class UserComponent<T> { ... }
Это, очевидно, дает ошибку, но дает хорошее представление о том, чего я хочу достичь.
Другим методом может быть использование дженериков с Resolver:
// the route:
{
path: '/user-b',
component: UserComponent,
resolve: { user: UserResolver<UserB> }
}
// the resolver:
export class UserResolver<T> implements Resolve<boolean> {}
В этом ответе использовался этот метод, но для меня он выдает ошибку UserResolver<UserB>
: «Значение типа 'typeof UserResolver' не может быть вызвано. Вы хотели включить 'new'?»
@MikeOne Хороший вопрос. На самом деле я отправляю компоненты в частную библиотеку для создания динамических компонентов. Для простоты я просто объяснил проблему в целом.
Не уверен, как я мог пропустить это, но значение свойства данных на угловом маршруте может быть типа any
. Это означает, что вы можете сделать это:
// the route in app-routing.module.ts
{
path: 'user-a',
component: UserComponent,
data: {
componentType: UserA
}
}
// UserComponent:
@Component({...})
export class UserComponent implements OnInit {
constructor(private route: ActivatedRoute) {}
ngOnInit(): void {
const componentType: any = this.route.snapshot.data['componentType'];
}
}
Почему-то я всегда предполагал, что значение свойства данных может быть только строкой, но в документах ясное состояние any
.
Просто любопытно.. но зачем тебе это?.. Что это дает вам на стороне компонентов?