打字稿“找不到名称<fieldname>”

时间:2018-11-13 14:25:52

标签: javascript typescript

我对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"
            });
    };
};

3 个答案:

答案 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._tokensthis._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;