打字稿:无法在Angular项目中为接口属性设置值

时间:2019-08-09 10:51:57

标签: angular typescript angular8

我正在研究angular,并尝试使用以下代码用jwt添加基本身份验证:

buffering=0

界面

private authProvider(
    username: string,
    password: string
  ): Observable<IServerAuthResponse> {


    let accessToken: IServerAuthResponse;
    this.http.post<any>(CCommonUrl.LOGIN, {
      username,
      password
    }, { observe: 'response' }).subscribe((res) => {
      // console.log(res.json);
      console.log(res.headers);
      console.log(res.headers.get('Authorization'));
      accessToken.Authorization = res.headers.get('Authorization');
    });
    return of(accessToken);

现在export interface IServerAuthResponse { Authorization: string; } 正在显示令牌,但是我无法为console.log赋值。代码失败并出现以下错误

  

core.js:7187错误TypeError:无法设置以下属性的“授权”   未定义       在SafeSubscriber._next(auth.service.ts:60)

任何见解都会有所帮助

编辑:我需要在界面内部获取价值。由于令牌出现在标题中,因此我无法将其直接映射到接口]

Edit2:就重复而言,该问题具有类,但在本例中是其接口

2 个答案:

答案 0 :(得分:1)

接口不是对象的实例,因此您需要像

那样初始化对象
let accessToken: IServerAuthResponse = {Authorization: ''};

然后您可以使用此行

accessToken.Authorization = res.headers.get('Authorization');

答案 1 :(得分:1)

首先需要初始化accessToken变量。

export interface IServerAuthResponse {
  Authorization?: string;
}

let accessToken: IServerAuthResponse = {}

...
}, { observe: 'response' }).subscribe((res) => {
      // console.log(res.json);
      console.log(res.headers);
      console.log(res.headers.get('Authorization'));
      accessToken['Authorization'] = res.headers.get('Authorization');
    });