В предыдущих блогах я обсуждал, насколько мощна система типов в TypeScript. Интерфейсы - это лишь один из основных принципов, позволяющих системе типов проверять форму значения. Например, один тип данных, для которого особенно полезны интерфейсы, - это объекты. Мы можем аннотировать переменную красным как строку или две как число, но если бы TypeScript правильно проверял тип объекта, нам сначала нужно было бы аннотировать его значения.

Если бы мы создали приложение, каталогизирующее животных зоопарка, было бы выгодно использовать объект, содержащий пары ключ / значение, содержащие атрибуты этого животного.

let bear = { numberOfLegs: 4, color: “brown”}
let flamingo ={ numberOfLegs: 2, color: “pink”}

Это два примера объектов, которые мы могли бы найти в нашем приложении. Чтобы TypeScript знал, что животное должно иметь свойства числа, представляющего количество ног, и строки, представляющей его цвет, у нас должен быть интерфейс, определяющий эти требования.

interface Animal { numberOfLegs: number, color: string}

Хотя этот интерфейс служит нашей цели для объектов, медведя и фламинго, как они есть, есть много функций, которые могут быть у одного животного, а у других может не быть. Например, добавление атрибута для количества крыльев фламинго дисквалифицирует фламинго как животное, но добавление этого свойства в интерфейс дисквалифицирует медведя. В этом примере мы использовали бы необязательное свойство.

Как показано выше, TypeScript не выдает ошибку, потому что свойство количества крыльев является необязательным. Наконец, могут быть изменены некоторые свойства, например количество потомков. Однако (будем надеяться) количество конечностей останется постоянным на протяжении всей жизни животного. Поэтому при настройке нашего интерфейса мы не хотим, чтобы свойство количества ножек было изменяемым. В TypeScript это можно сделать, добавив ключевое слово readonly. Благодаря этому атрибут может быть установлен только во время его создания.

Это самая базовая информация об интерфейсах. Для более подробной информации обратитесь к официальной документации. Интерфейсы - это мощные инструменты, которые лучше всего работают в сочетании с классами. На следующей неделе я расскажу, как использовать интерфейсы и абстрактные классы для написания кода многократного использования.