- Опубликовано
Типы и интерфейсы. Часть 3
- Автор
- Имя
- Счастливый тимлид | ♥ Frontend
- Telegram
- Счастливый тимлид | ♥ Frontend2204 подписчика692 поста
Типы и интерфейсы. Часть 3
Раз уж мы заговорили про классы, то давайте проясним и связанные с ними моменты.
Исторически так сложилось, что классы имплементируют, то есть реализуют, интерфейсы. Интерфейс является описанием, которому экземпляры класса должны соответствовать.
Сразу приведу пример: У нас есть уже наш давний знакомый интерфейс AInt, и его может имплементировать класс CClass. Выглядеть будет вот так:
typescript// Описываем интерфейс interface AInt { first: boolean; second: number; }
typescript// Имплементируем class CClass implements AInt { first = true; second = 20; }
typescript// Создаем экземпляр const x = new CClass(); console.log(x.first); // true
А теперь интересно, сможем ли мы создать объект с другими значениями, ведь мы зафиксировали конкретные значения first и second в конструкторе. Пробуем:
typescriptconst a: CClass = { first: false; second: 15; }
typescriptconst b: AInt = { first: false; second: 15; }
Да, все получилось! Класс в этом случае ведет себя так же как и интерфейс. Результаты идентичны.
А как поживает наш type? Думаю вы уже догадались. TypeScript настолько не различает type и interface, что готов имплементировать и type тоже.
typescript// Описываем тип type AType { first: boolean; second: number; }
typescript// Имплементируем class CClass implements AType { first = true; second = 20; }
typescript// Создаем экземпляр const x = new CClass(); console.log(x.first); // true
Более того, чтобы показать что TypeScript не видит разницы не только в типах и интерфейсах, но и в классах я воспользуюсь в качестве основы уже знакомым нам классом AClass:
typescript// Описываем тип class AClass { public first: boolean; public second: number;
typescriptconstructor(x: boolean, y: number) { this.first = x; this.second = y; } }
typescript// Имплементируем class CClass implements AClass { first = true; second = 20; }
typescript// Создаем экземпляр const x = new CClass(); console.log(x.first); // true
И здесь еще хочется добавить про расширение. Классы тоже умеют расширять типы, интерфейсы и другие классы. И да, у них тоже особенный синтаксис. Вот так можно добавить третье поле к AInt с помощью класса:
typescriptclass BClass implements AInt { public third: string;
typescriptconstructor() { this.first = true; this.second = 1; this.third = 'Hello'; } }
Расширять, как вы поняли, можно так же и type, и class. Но это уже сами 🙂
Предыдущий пост
- Опубликовано
как создать алиас comp для ffmpeg в zsh
Следующий пост
- Опубликовано
Как открыть тюбик зубной пасты в отеле
Закрепленные
Из подборки #frontend
- Опубликовано
Как сделать страницу с халявой и промокодами
- Опубликовано
Встречайте геймификацию в комментах
- Опубликовано
Когда проще завайбкодить чем нагуглить
- Опубликовано
Телеграмовский сосун (или какун, как правильно?)
- Опубликовано
Итоги
- Опубликовано
Поделитесь вашими любимыми мемами уходящего года
Свежие посты
- Опубликовано
Как сделать страницу с халявой и промокодами
- Опубликовано
Встречайте геймификацию в комментах
- Опубликовано
Когда проще завайбкодить чем нагуглить
- Опубликовано
весёлая дискуссия в канале Деплой о резюме
- Опубликовано
Жизнь по скраму
- Опубликовано
не забудь завести будильник
- Опубликовано
Каникулы в регионе без интернета
- Опубликовано


