транспиляция конвертирует программу из одного языка в другой (например, из TypeScript в JavaScript).
С другой стороны, наш летающий объект также является автомобилем, поэтому мы можем объявить интерфейс Flyable следующим образом.
Листинг 3.19. Расширение интерфейса
interface Flyable extends MotorVehicle{ Один интерфейс расширяет другой
fly(howHigh: number);
land(); Объявляет сигнатуру метода для реализации в классе
}
В таком случае можно объявить класс SecretServiceCar так:
Листинг 3.18. Класс, реализующий три интерфейса
class SecretServiceCar implements MotorVehicle, Flyable, Swimmable {
// Реализуйте здесь все методы из трех интерфейсов.
}
Листинг 3.17. Класс, расширяющий и реализующий
class SecretServiceCar extends Car implements Flyable, Swimmable {
// Реализуйте здесь все методы из двух интерфейсов.
}
Реализуя все методы, объявленные в Flyable и Swimmable, наш класс SecretServiceCar превращает обычный автомобиль в летающе-плавающий объект. Класс Car при этом продолжает представлять обычный авто с функциональностью, объявленной в интерфейсе MotorVehicle.
Теперь спроектируем интерфейс для машины Джеймса Бонда. Все верно, для агента 007. Эта особая машина должна уметь летать, а также плавать. Для начала объявим пару интерфейсов.
Листинг 3.15. Интерфейсы Flyable и Swimmable
interface Flyable {
fly(howHigh: number);
land();
}
interface Swimmable {
swim(howFar: number);
}
Класс может реализовывать более одного интерфейса, поэтому давайте убедимся, что наш класс реализует эти два.
Листинг 3.16. Машина с тремя интерфейсами
class Car implements MotorVehicle, Flyable, Swimmable {
// Реализуйте здесь все методы из трех интерфейсов.
}
Делать каждую машину летающей и плавающей — не очень хорошая идея, поэтому давайте не будем модифицировать класс Car из листинга 3.14. Вместо этого используем наследование класса и создадим класс SecretServiceCar, расширяющий Car и добавляющий больше возможностей.
Явно мы могли бы объявить тип car так (хотя это не обязательно):
const car: Car = new Car();
Мы также могли бы объявить для константы car тип MotorVehicle, поскольку наш класс car реализует этот пользовательский тип:
const car: MotorVehicle = new Car();
Другими словами, предыдущий фрагмент кода утверждает: «Я обещаю, что класс Car реализует API, объявленный в интерфейсе MotorVehicle». Следующий листинг показывает упрощенную реализацию этого интерфейса в классе Car.
Листинг 3.14. Класс, реализующий MotorVehicle
Обратите внимание, что ни один из методов MotorVehicle не реализован. Теперь мы можем объявить класс Car, который будет реализовывать все методы, объявленные в интерфейсе MotorVehicle. С помощью ключевого слова implements мы объявляем, что класс реализует конкретный интерфейс:
class Car implements MotorVehicle {
}
Это простое объявление класса не скомпилируется. Вы получите ошибку: «Class Car incorrectly implements interface MotorVehicle» (Класс Car неверно реализует интерфейс MotorVehicle). Когда вы объявляете, что класс реализует некий интерфейс, вы должны реализовать каждый метод, объявленный в нем.
Давайте смоделируем интерфейс автомобиля с помощью синтаксиса TypeScript. Следующий листинг показывает интерфейс MotorVehicle, объявляющий пять методов.
Листинг 3.13. Интерфейс MotorVehicle
Листинг 3.12. Один конструктор с опциональным аргументом
- Басты
- ⭐️IT-технологии
- Яков Файн
- TypeScript быстро
- 📖Дәйексөздер
