如何使用打字稿构造函数声明变量
问题描述:
我试图使用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
函数抛出这个错误。
答
问题正在发生,因为创建函数不会为编译器创建类型,因此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
我知道,但我想明白为什么使用'JS'函数抛出这个错误! –