未定义的函数应该在那里?

时间:2019-02-06 08:14:31

标签: angular typescript

我有一个类型为“ user”的对象,该对象应具有一个功能“ getPermission()”。在(Angular 7的)运行时期间,它将引发错误“ TypeError:this.user.getPermission不是函数”。

在这里,我认为最基本的上下文是:

我的用户类别:

export class User  {
   ...
   public getPermission(): boolean {
      return true;
   }
   ...
}

我有一项服务,可以从api(asp.net核心)中获取用户:

 getUser(id): Observable<User> {
   return this.http.get<User>(this.baseurl + 'user/' + id);
 }

然后我有一个解析器:

@Injectable()
export class UserEditResolver implements Resolve<User> {
   constructor(private userService: UserService, private authService: AuthService,
       private router: Router,
       private alertify: AlertifyService) {}

   resolve(route: ActivatedRouteSnapshot): Observable<User> {
       return this.userService.getUser(this.authService.decodedToken.nameid).pipe(
           catchError(error => {
               this.alertify.error('Problem retrieving your data');
               this.router.navigate(['/users']);
               return of(null);
           })
       );
   }
}

最后在我的组件中,我调用函数getPermission:

 user: User;

 ngOnInit() {

   this.route.data.subscribe(data => {
     this.user = data['user'];
   });

   const t: boolean = this.user.getPermission();
 }

如上所述,我得到了错误:

TypeError: this.user.getPermission is not a function

除了函数和运行时不存在的所有其他函数之外,还包含从api加载的所有属性。

如果能成功实现这一目标,我将非常感激!

2 个答案:

答案 0 :(得分:3)

TypeScript仅在编译时存在。它在运行时不执行任何操作。

仅执行this.http.get<User>(...)不会将您收到的任何内容转换为您指定的类User

您需要自己解析输入并实例化User实例。

答案 1 :(得分:0)

创建该类的实例

user: User = new User();