2016-05-31 252 views
0

我试图使用TypeScript构造在Angular2项目,我糊涂了关于如何使用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来解决这个问题,但我想知道为什么javascript函数抛出这个错误。

回答

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 
+0

我知道,但我想明白为什么使用'JS'函数抛出这个错误! –