如何使用TypeScript构造函数声明变量

时间:2016-05-31 16:14:05

标签: javascript class constructor typescript

我正在尝试在Angular2项目中使用initWithFrame构造函数,我对如何使用TypeScript构造函数初始化变量感到困惑:

class

现在我将在课堂上使用它:

function Auto () {
    this.move = function () {
        console.log('move');
    }
    this.stop = function () {
        console.log('stop');
    }
}

当我尝试编译时,我收到此错误class Car { constructor(private _auto: Auto) { } onMove() { this._auto.move(); } } ,所以有人可以帮我理解发生了什么吗?

为什么Cannot find name Auto使private _auto: Auto成为_auto类的新实例?

更新:我知道我可以使用Auto来解决问题,但我想了解为什么class函数会抛出此错误。

1 个答案:

答案 0 :(得分:0)

问题正在发生,因为创建函数不会为编译器创建一个类型,因此Auto不作为类型存在。现在它只被称为函数的名称。

解决此问题的最简单方法是使用Auto的类代替:

class Auto {
    move() {
        console.log('move');
    }

    stop() {
        console.log('stop');
    }
}

然后你可以这样做:

let auto = new Auto();
let car = new Car(auto);

或者,您可以手动描述函数的类型。这是一个例子,但不要这样做,因为你应该把它转换成一个类:

interface AutoConstructor {
    new(): Auto;
}

interface Auto {
    move(): void;
    stop(): void;
}

let Auto: AutoConstructor = function() {
    let self = this as Auto;
    self.move = function () {
        console.log('move');
    }
    self.stop = function () {
        console.log('stop');
    }
} as any;

let auto = new Auto();
let car = new Car(auto); // ok