Angular 2 Typescript inherratance state-pattern issue

时间:2016-11-17 18:58:03

标签: inheritance angular typescript extends typescript2.0

我正在使用Typescript继承来实现状态模式,但是当我新建超类时,我遇到了运行时错误。希望找出原因或错误,谢谢。

工作人员:https://plnkr.co/edit/XScXR4?p=preview

vehicle.ts     从“./car”;

导入{Car}
export class Vehicle {

  description: string = "Generic Vehicle";

  swap(app: AppComponent): void {
     app.vehicle = this.isCar(app) ? new Vehicle() : new Car();
  }

  /* Just a helper for demo purposes */
  private isCar(app: AppComponent) {
    return app.vehicle instanceof Car;
  }

}

car.ts

import { Vehicle } from "./vehicle";

export class Car extends Vehicle {
  description: string = "Car";
}

它基本上是一种状态模式。任何类型的车辆'Vehicle'或'Car'都可以在'AppComponent'中交换实例

app.component.ts

import { Component, OnInit } from '@angular/core';
import { Vehicle }  from "./vehicle";
import { Car }  from "./car";

@Component({
  moduleId: module.id,
  selector: 'my-app',
  templateUrl: 'app.component.html',
})
export class AppComponent implements OnInit {
  vehicle: Vehicle;

  swap(): void {
    this.vehicle.swap(this);
  }

  ngOnInit() {
    //No problems works perfectly
    //this.vehicle = new Car();

     //Error: TypeError: Cannot read property 'prototype' of undefined(…)
    this.vehicle = new Vehicle();
  }

}

如果我使用'Car'实例(子类型)进行初始化,则没有问题。

如果我使用'Vehicle'实例(超类型)初始化,我会收到JS运行时错误

Error: TypeError: Cannot read property 'prototype' of undefined(…)

我真的很想知道为什么,因为这似乎是合法的事情。

我在这里做错了什么?

plunker中,在app.component.ts中只需替换

this.vehicle = new Car() 

 this.vehicle = new Vehicle()

看到问题。

非常感谢 约翰

0 个答案:

没有答案