开发者问题收集

那里应该有未定义的函数吗?

2019-02-06
227

我有一个“user”类型的对象,它应该有一个函数“getPermission()”。在运行时(Angular 7)它会抛出错误“TypeError: this.user.getPermission 不是函数”。

以下是我认为必不可少的内容:

我的用户类:

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

我有一个服务,可以从 api(即 asp.net core)中获取用户:

 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个回答

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

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

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

unional
2019-02-06

创建该类的实例

user: User = new User();
Sachila Ranawaka
2019-02-06