В Angular 2 guide Dependency Injection (в первой главе Почему инъекция зависимостей?) есть некоторые странные строки кода. Они работают, но я не знаю, почему. Вы также можете найти рабочий пример на https://angular.io/resources/live-examples/dependency-injection/ts/eplnkr.html.Наследование Strange Bookscript на Angular 2 Руководство по руководству DI
В файле car.tsкласс двигателя и класс автомобилей объявлены как:
export class Engine {
public cylinders = 4;
}
export class Car {
public description = 'DI';
constructor(public engine: Engine, public tires: Tires) { }
...
}
В файле машино-creation.ts используется класс автомобилей. ..
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;
}
Он работает без предупреждений или ошибок с помощью компилятора TypScript.
Странно! Почему можно создать автомобиль с неправильным типом двигателя?
new Engine2(...)
создает объект из класса Engine2, который не является производным от класса Engine.
Возможно, это ошибка или особенность машинописного машиностроения?
Я ожидал бы следующие строки кода в файле car-creation.ts.
class Engine2 extends Engine {
constructor(public cylinders: number) {
super();
}
}
... или ...
class Engine2 extends Engine {
constructor(cylinders: number) {
super();
this.cylinders = cylinders;
}
}