我对TypeScript很陌生。
我创建了一个带有一些私有字段的类。当我尝试为类方法中的匿名回调函数中的一个字段分配值时,出现错误...
(TS) Cannot Find the name '_tokens'
我怀疑存在范围界定问题,但是据我对JavaScript的了解,这应该不是问题。我不确定该如何解决。有任何想法吗?
请参见..“ populateTokens() ”方法以获取错误。
class SingleSignOn {
private _appTokensURL: string = "/api/IFSessionCache/Auth/";
private _tokens: string[];
/**
* Initialize an instance of the SingleSignOn class to manage the permissions for the
* application associated with the application.
*/
constructor() {
this.populateTokens();
};
/**
* Gets a list of permissions tokens associated with the currently logged on user for
* the application.
*/
private getApplicationTokens(): Q.IPromise<{}> {
return Unique.AJAX.Get(this._appTokensURL, null, ENUMS.AjaxContentTypes.JSON);
};
private populateTokens () {
this.getApplicationTokens().then(
function (data) {
_tokens = <string[]>data; // (TS) Cannot find name "_tokens"
});
};
};
答案 0 :(得分:2)
您使用了错误的语法:
this.getApplicationTokens().then(
(data) => {
this._tokens = <string[]>data; // note: turned into an arrow function and added the `this` keyword
});
注释,如果您继续使用function() ...
语法,this
关键字将不是指向类实例,而是指向callee
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
问候
答案 1 :(得分:1)
一个类的属性没有作用域,只要它们属于该对象,它们就可以存在,并且可以访问该对象的所有对象也可以访问其所有属性。但是,必须始终在其对象上 访问属性,例如方法内部的something._tokens
或this._tokens
。另外,您还必须确保this
就是您想的那样,在这种情况下,您必须使用箭头功能来指向access the correct this
inside a callback:
this.getApplicationTokens().then( (data) => {
this._tokens = data as string[];
});
答案 2 :(得分:0)
我认为您只是缺少了this
中的 _tokens
关键字:
this._tokens = <string[]>data;