Angular 角度响应不可分配给类型';请求?:HttpRequest<;任何>;

Angular 角度响应不可分配给类型';请求?:HttpRequest<;任何>;,angular,typescript,auth-guard,Angular,Typescript,Auth Guard,我尝试用Angular编写AuthGuard,但出现以下错误: 类型“typeof AuthServiceService”不可分配给类型“(请求?:HttpRequest)=>string | Promise”。 类型“typeof AuthServiceService”与签名(请求?:HttpRequest):字符串不匹配 这是我的auth-service.service.ts: @Injectable({ providedIn: 'root' }) export class AuthSe

我尝试用Angular编写AuthGuard,但出现以下错误:

类型“typeof AuthServiceService”不可分配给类型“(请求?:HttpRequest)=>string | Promise”。 类型“typeof AuthServiceService”与签名(请求?:HttpRequest):字符串不匹配

这是我的auth-service.service.ts:

@Injectable({
  providedIn: 'root'
})
export class AuthServiceService {

  constructor(
    private http:HttpClient,
    public jwtHelper: JwtHelperService) { }
  login(data):Observable<any>{
    return this.http.post(baseUrl + 'ApplicationUser/login' ,data)

  }

  handleError(error: HttpErrorResponse) {
    return throwError(error);
  }

  public isAuthenticated(): boolean {
    const token = localStorage.getItem('token');
    return !this.jwtHelper.isTokenExpired(token);
  }

}
我在tokenGetter的这一行上遇到了以下错误:

const JWT_Module_Options: JwtModuleOptions = {
  config: {
    tokenGetter: AuthServiceService
  }
};
有人能告诉我AuthService的响应应该是什么样子吗?

您的代码似乎很好(至少对我来说),除了一个问题是
构造函数中的初始化方法

 constructor(private http:HttpClient,
    public jwtHelper: JwtHelperService) { }
  login(data):Observable<any>{
    return this.http.post(baseUrl + 'ApplicationUser/login' ,data)

  }
构造函数(私有http:HttpClient,
公共jwtHelper:JwtHelperService{}
登录(数据):可观察{
返回此.http.post(baseUrl+'ApplicationUser/login',数据)
}
将此更改为下面的

  constructor(private http:HttpClient, public jwtHelper: JwtHelperService) { }
    
  login(data): Observable<any> {
      return this.http.post(baseUrl + 'ApplicationUser/login' ,data)
  }
constructor(私有http:HttpClient,公共jwtHelper:JwtHelperService){}
登录(数据):可观察{
返回此.http.post(baseUrl+'ApplicationUser/login',数据)
}

经过一些研究,我找到了解决办法。 tokenGetter选项需要一个带有我的令牌的字符串-因此我从本地存储返回了令牌,如下所示:

const JWT_Module_Options: JwtModuleOptions = {
  config: {
    tokenGetter: () => {
      return localStorage.getItem('token')
    }
  }
};
现在,我的AuthGuard按预期工作:)
谢谢大家的帮助!:)

可观察对象
只有在有订户时才会触发。不要从构造函数返回(?)添加一个
subscribe
块,在其中执行您的工作(大概,在
localStorage
中设置auth标记。如何定义AuthGuard组件..?如果您也添加了该代码,则会对您的问题有一个很好的了解..在哪里出现上述编译错误,您也可以显示出来..谢谢!我按照您的建议格式化了代码。但遗憾的是,这不是解决方案。我已经编辑了m用我得到错误的代码发布:const JWT_Module_Options:JwtModuleOptions={config:{tokenGetter:AuthServiceService}};然后它清楚地表明预定义的
JwtModuleOptions
class param
tokenGetter
期望
HttpRequest
作为参数。您尝试过这个吗。。
const JWT_Module_Options: JwtModuleOptions = {
  config: {
    tokenGetter: () => {
      return localStorage.getItem('token')
    }
  }
};