如何获取已在Angular中传递到canDeactivate Guard的通用组件属性?

如何获取已在Angular中传递到canDeactivate Guard的通用组件属性?,angular,casting,typescript-generics,angular-guards,Angular,Casting,Typescript Generics,Angular Guards,我想将多个组件(Component1 | Component2)传递到我的canDeactivate守护程序中,所以我使用下面这样的泛型 问题-我想从传入的每个组件访问一个属性,那么如何获取通用组件属性呢 我是不是要投什么的? 我可以在调试器中看到组件在那里,但在进入函数live之前,我无法访问属性 仅供参考-component.profileForm.dirty不起作用,因为在我进入函数之前,它不知道t是什么 导出类PreventUnsavedChangesGuard实现CanDeactiv

我想将多个组件(Component1 | Component2)传递到我的canDeactivate守护程序中,所以我使用下面这样的泛型

问题-我想从传入的每个组件访问一个属性,那么如何获取通用组件属性呢

我是不是要投什么的? 我可以在调试器中看到组件在那里,但在进入函数live之前,我无法访问属性

仅供参考-
component.profileForm.dirty不起作用,因为在我进入函数之前,它不知道t是什么

导出类PreventUnsavedChangesGuard实现CanDeactivate{
构造函数(私有confirmService:confirmService){}
canDeactivate(组件:T):可观察的| boolean{
if(component.hasOwnProperty('profileForm')){
if(component.profileForm.dirty){
返回此.confirmService.confirm();
}
}
返回true;
}

}
您可以定义一个界面,其中包含您希望组件拥有的最少信息,例如

interface HasProfileForm {
    profileForm: Form
}
然后您可以修改您的防护以使用新界面,例如

export class PreventUnsavedChangesGuard <T extends HasProfileForm> implements CanDeactivate <T> {

  constructor(private confirmService: ConfirmService) {}

  canDeactivate(component: T): Observable<boolean> | boolean {
    if (component.hasOwnProperty('profileForm')) {
      if (component.profileForm.dirty) {
        return this.confirmService.confirm();
      }
    }
    return true;
  }
}
导出类PreventUnsavedChangesGuard实现CanDeactivate{
构造函数(私有confirmService:confirmService){}
canDeactivate(组件:T):可观察的布尔值{
if(component.hasOwnProperty('profileForm')){
if(component.profileForm.dirty){
返回此.confirmService.confirm();
}
}
返回true;
}
}

你好,雅格布。我发现我是通过这样做得到这个属性的:if(component['profileForm'].dirty),你的解决方案会比我做的更好还是更差?我认为这会更好,因为你会通过一个类型强制执行这个要求,而这个类型在某种程度上是Typescript背后的一件大事。