Rest 需要帮助理解angular2中的接口和/或抽象类吗
我对安圭拉的世界还不熟悉。我正在尝试为某些组件创建接口,然后在我的模型中实现这些接口,以便确保它们能够正常工作 我注意到的一件事是,如果我创建这些对象的新实例,它们工作得很好,但是当我从restful调用中提取数据时,我使用类型转换将数据转换为我期望的对象类型。下面的代码是一个伪示例 我来自Java/C++背景,所以我希望有人能看到我正在尝试做的事情,并向我解释如何使其正常工作 提前谢谢 不起作用---Rest 需要帮助理解angular2中的接口和/或抽象类吗,rest,typescript,angular,Rest,Typescript,Angular,我对安圭拉的世界还不熟悉。我正在尝试为某些组件创建接口,然后在我的模型中实现这些接口,以便确保它们能够正常工作 我注意到的一件事是,如果我创建这些对象的新实例,它们工作得很好,但是当我从restful调用中提取数据时,我使用类型转换将数据转换为我期望的对象类型。下面的代码是一个伪示例 我来自Java/C++背景,所以我希望有人能看到我正在尝试做的事情,并向我解释如何使其正常工作 提前谢谢 不起作用--- 这里发生的情况是,从后端检索到的对象只是一个普通的Javascript对象,可以强制转换到车
这里发生的情况是,从后端检索到的对象只是一个普通的Javascript对象,可以强制转换到车辆:
this._vehicleService.loadVehicles().subscribe(
vehicles => this.vehicles = <Vehicle[]>vehicles);
然后从后端使用它来创建车辆阵列,而不是强制转换它们:
this._vehicleService.loadVehicles().subscribe(
vehicles => this.vehicles = vehicles.map(Vehicle.fromJson));
这样,结果中的车辆不仅具有车辆的所有数据,而且还具有车辆类的行为,因为它们是车辆上的实例。TypeScript中的类和接口之间的主要区别在于运行时不存在接口。它们“仅”用于编译和类型检查 将元素强制转换为接口/类“only”会告诉TypeScript对象遵循它的结构,但实际上它不是该类型的实例。乍一看有点令人不安。主要结果(在类的情况下)是强制转换不允许您使用该类的方法 我已经这样做了:
private vehicles: Vehicle[];
this._vehicleService.loadVehicles().subscribe(
vehicles => this.vehicles = <Vehicle[]>vehicles);
私人车辆:车辆[];
此.\u vehicleService.loadVehicles().订阅(
车辆=>this.vehicles=车辆);
您的确切编译错误是什么?不是编译器错误。以上来自安格尔大学的答案总结了这一点。我得到的是一个JSON对象,它没有创建我期望/想要的类型的实例。当我“新建”对象时,我会根据它实现的接口获得我期望的方法。从rest调用进行强制转换不会初始化该类。它只是把数据放在那里。感谢我所害怕的。我喜欢创建辅助方法的想法。至少这会有帮助。我觉得奇怪的是,在Angular2中实现接口的行为与Java、C#等中接口的工作方式不同。也许他们会决定改变目前的行为。我认为这将是一个很大的帮助。多年来我一直不是javascript的忠实粉丝,但是这个新的Angular2/typescript看起来非常有前途。也许这会激励我构建一个http插件,可以在返回时初始化数据模型。谢谢你的信息。
class Vehicle {
constructor(private name, private year) {
}
static fromJson({name,year}) {
return new Vehicle(name, year);
}
}
this._vehicleService.loadVehicles().subscribe(
vehicles => this.vehicles = vehicles.map(Vehicle.fromJson));
private vehicles: Vehicle[];
this._vehicleService.loadVehicles().subscribe(
vehicles => this.vehicles = <Vehicle[]>vehicles);