2017-06-22 30 views
2

可能会提前询问此问题。但他们并没有帮我解决我的问题。以下是我的服务文件。错误TS2339:属性'access_token'不存在角2

import { Injectable } from '@angular/core'; 
 
import { Http, Headers, RequestOptions, Response } from '@angular/http'; 
 
import { CookieService } from 'angular2-cookie/core'; 
 
import { AppSettings } from '../app.settings'; 
 
import { Ticket } from '../_models/index'; 
 

 
@Injectable() 
 
export class TicketService { 
 
    options= new RequestOptions(); 
 
    public access_token:string; 
 
    constructor(
 
     private http: Http, 
 
     private cookieService: CookieService 
 
    ) { 
 
     let headers = new Headers(); 
 
     headers.append('Content-Type', 'application/json'); 
 
     headers.append('Accept', 'application/json'); 
 
     this.options = new RequestOptions({ headers: headers }); 
 
     let userInfo = this.cookieService.getObject('userInfo'); 
 
     if(userInfo){ 
 
      //this.access_token = (userInfo.access_token)?userInfo.access_token:''; 
 
     } 
 
    } 
 
}

在这里,我收到从饼干ACCESS_TOKEN来验证用户,并将其倾倒到一个变量的access_token。如果用户已经登录,则工作正常。但是,第一次执行npm start时,它会生成错误错误TS2339:属性'access_token'不存在。所以明确需要评论this.access_token =(userInfo.access_token)?userInfo.access_token:'';这行,然后npm开始工作。我最初也定义了变量。但是,它仍然会产生一个错误。我没有得到我做错的地方。如果您遇到同样的问题并解决问题,请指导。

+0

你尝试初始化变量吗?我认为TypeScript会在生成的JS中排除它:'public access_token:string ='';' – Arg0n

+0

不正确。如果在代码的任何地方没有提及该属性,则只能通过TS或缩小来清除它。 –

+0

你也尝试将'userInfo'标记为'any'类型吗? 'let userInfo:any = this.cookieService.getObject('userInfo');' – Arg0n

回答

-1

只是改变这一行:

let userInfo = this.cookieService.getObject('userInfo'); 

对此(: any):

let userInfo: any = this.cookieService.getObject('userInfo'); 

为了让打字稿知道返回值可以是/包含任何数据。

+0

一个'CookieService'就是一个很好的例子,它可以使用'any'作为返回值。特别是因为他(在这种情况下)只用它来设置一个定义类型的变量('access_token:string')。是的,我意识到这是在发生错误时发生的。这也是为什么我很久以前就删除了这个评论。 – Arg0n

+0

拥有一个通用函数来获取cookie而不必为每个函数写一个新函数更方便。它也使得它可以在没有修改的情况下在其他应用中重用。 – Arg0n

相关问题