Javascript Typescript:无法访问函数中的公共变量

Javascript Typescript:无法访问函数中的公共变量,javascript,typescript,Javascript,Typescript,我想访问myVariable内部init()但变量未定义,但我可以访问convert()内部的变量。有什么建议我在这里遗漏了什么 export const MyComponent: ng.IComponentOptions = { templateUrl: 'MyView.html', bindings: { myVariable: '<', }, controller: common.createController(MyControlle

我想访问
myVariable
内部
init()
但变量
未定义
,但我可以访问
convert()
内部的变量。有什么建议我在这里遗漏了什么

export const MyComponent: ng.IComponentOptions = {
    templateUrl: 'MyView.html',
    bindings: {
        myVariable: '<',
    },
    controller: common.createController(MyController)
};

export class MyController {

    public myVariable: MyVariable;

    constructor($scope) {
        this.scope = $scope;
        this.init().then(() => {
            this.convert();
        });

        private init(): Promise<void> {
        console.log("init(): ", this.myVariable); //Error --> undefined
        //Call REST API and return a promise            
    }

    private convert(): void {
        console.log("convert(): ", this.myVariable); //No Error
    }
}
export const MyComponent:ng.IComponentOptions={
templateUrl:'MyView.html',
绑定:{

myVariable:“通常发生这种情况是因为在基本构造函数之前调用了
init()
——基本构造函数通常是在视图库中设置变量的对象

我不知道您使用的是什么视图库,但它看起来像angular。在这种情况下,angular将在构造函数运行后设置绑定(它需要先创建类,然后才能分配绑定,因为它不提供基类,所以无法在构造函数中使用该基类进行绑定)

Angular API公开了与react类似的生命周期方法,您需要
$onInit
钩子,它将在构造函数和绑定完成后调用


您可以在此处阅读更多内容

您在哪里设置MyController.myVariable
?如果您不设置它,它将保持未定义状态(或者无法在TS 2.8中使用选项strict进行编译)。您的问题很可能是在构造函数之后和承诺解决之前设置了变量。因此,了解值的设置位置非常重要。这里没有基构造函数,TS需要在派生类中调用
super
,因此如果这是问题,则整个代码将不会运行。添加super()抛出错误:“super”只能在派生类中引用。MyController是基类。@david我理解,请查看我修改的答案