In der Angular 2 guide Dependency Injection (im ersten Kapitel Warum Abhängigkeit Injektion?) gibt es einige seltsame Codezeilen. Sie arbeiten, aber ich weiß nicht warum. Sie finden das laufende Beispiel auch unter https://angular.io/resources/live-examples/dependency-injection/ts/eplnkr.html.Seltsame Typoskript Vererbung auf Angular 2 Guide Tutorial DI
In der Datei car.ts die Klasse Motor und die Klasse Car deklariert als:
export class Engine {
public cylinders = 4;
}
export class Car {
public description = 'DI';
constructor(public engine: Engine, public tires: Tires) { }
...
}
in der Datei Auto-creation.ts die Klasse Auto verwendet wird. ..
import { Car, Engine, Tires } from './car';
class Engine2 {
constructor(public cylinders: number) { }
}
export function superCar() {
// Super car with 12 cylinders and Flintstone tires.
let bigCylinders = 12;
let car = new Car(new Engine2(bigCylinders), new Tires());
car.description = 'Super';
return car;
}
Es funktioniert ohne Warnungen oder Fehler vom Typescript-Compiler.
Seltsam! Warum ist es möglich, ein Auto mit einem falschen Motortyp zu erstellen?
new Engine2(...)
erstellt ein Objekt aus der Klasse Engine2, das nicht von der Klasse Engine abgeleitet ist.
Ist dieses Verhalten ein Fehler oder eine Funktion von Typescript?
Ich würde die folgenden Codezeilen in der Datei car-creation.ts erwarten.
class Engine2 extends Engine {
constructor(public cylinders: number) {
super();
}
}
... oder ...
class Engine2 extends Engine {
constructor(cylinders: number) {
super();
this.cylinders = cylinders;
}
}