Интерфейсы
Интерфейсы имеют нулевое влияние JS во время выполнения. В интерфейсах TypeScript есть много возможностей для объявления структуры переменных.
Следующие два являются эквивалентными объявлениями, первое с использованием встроенных аннотаций, а второе с использованием интерфейсов:
Преимущество примера B состоит в том, что если кто-то создает библиотеку на основе myPoint
для добавления новых аргументов, он может легко добавить в существующее объявление myPoint
:
Поскольку интерфейс TypeScript открыт для дополнения, это важный принцип TypeScript, который позволяет использовать интерфейс для имитации расширяемости JavaScript.
Классы могут реализовывать интерфейсы
Если вы хотите использовать классы, которые должны следовать структуре объекта, которую кто-то объявил для вас в interface
, вы можете использовать ключевое слово implements
для обеспечения совместимости:
По сути, при наличии implements
любые изменения внешнего интерфейса Point
вызовут ошибки компиляции в базе кода, поэтому его можно легко синхронизировать:
Обратите внимание, что implements
ограничивает структуру экземпляров классов, а именно:
Такие вещи, как foo: Point = MyPoint
- это не одно и то же.
Обратите внимание
Не каждый интерфейс прост в реализации
Интерфейс предназначен для объявления любой структуры, которая может существовать в JavaScript.
Рассмотрим следующий пример, где что-то можно вызвать с помощью new
:
Вы могли бы иметь такой код:
Вы можете объявить весь JavaScript, используя интерфейсы, и вы даже можете безопасно использовать их из TypeScript. Это не означает, что вы можете реализовать их, используя классы TypeScript.
Last updated
Was this helpful?