Rest 需要帮助理解angular2中的接口和/或抽象类吗

Rest 需要帮助理解angular2中的接口和/或抽象类吗,rest,typescript,angular,Rest,Typescript,Angular,我对安圭拉的世界还不熟悉。我正在尝试为某些组件创建接口,然后在我的模型中实现这些接口,以便确保它们能够正常工作 我注意到的一件事是,如果我创建这些对象的新实例,它们工作得很好,但是当我从restful调用中提取数据时,我使用类型转换将数据转换为我期望的对象类型。下面的代码是一个伪示例 我来自Java/C++背景,所以我希望有人能看到我正在尝试做的事情,并向我解释如何使其正常工作 提前谢谢 不起作用--- 这里发生的情况是,从后端检索到的对象只是一个普通的Javascript对象,可以强制转换到车

我对安圭拉的世界还不熟悉。我正在尝试为某些组件创建接口,然后在我的模型中实现这些接口,以便确保它们能够正常工作

我注意到的一件事是,如果我创建这些对象的新实例,它们工作得很好,但是当我从restful调用中提取数据时,我使用类型转换将数据转换为我期望的对象类型。下面的代码是一个伪示例

我来自Java/C++背景,所以我希望有人能看到我正在尝试做的事情,并向我解释如何使其正常工作

提前谢谢

不起作用---


这里发生的情况是,从后端检索到的对象只是一个普通的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);