Необязательные и Readonly свойства
Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 41 из 73.
TypeScript предоставляет два мощных модификатора, которые дают вам этот контроль: модификатор необязательного свойства и модификатор readonly.
Символ ? делает свойство необязательным, что означает, что оно не обязательно должно присутствовать при создании объекта. Это полезно для свойств, которые могут понадобиться не всегда:
interface User {
name: string;
email?: string; // Необязательное свойство
}
let user1: User = { name: "Alice" }; // Валидно — email необязателен
let user2: User = { name: "Bob", email: "bob@example.com" }; // Также валидноМодификатор readonly предотвращает изменение свойства после создания объекта. Это идеально подходит для свойств, которые должны оставаться неизменными, таких как уникальные идентификаторы:
interface Product {
readonly id: number; // Нельзя изменить после создания
name: string;
}
let product: Product = { id: 1, name: "Laptop" };
product.name = "Gaming Laptop"; // Допустимо
// product.id = 2; // Ошибка: Невозможно присвоить значение 'id', так как оно предназначено только для чтенияВы можете комбинировать оба модификатора в одном интерфейсе, и эти модификаторы работают одинаково как с интерфейсами, так и с псевдонимами типов, обеспечивая точный контроль над структурами ваших объектов.
Задание
ЛегкоСоздайте интерфейс с именем Book со следующими свойствами:
titleтипаstring(обязательное)isbnтипаstring(только для чтения - readonly)subtitleтипаstring(необязательное)pagesтипаnumber(обязательное)publishedYearтипаnumber(только для чтения - readonly)genreтипаstring(необязательное)
Создайте интерфейс с именем Magazine со следующими свойствами:
nameтипаstring(обязательное)issueNumberтипаnumber(только для чтения - readonly)topicтипаstring(необязательное)monthlySubscriptionтипаboolean(обязательное)
Используя ваши интерфейсы, создайте следующие переменные:
- Создайте переменную с именем
novelтипаBookс title"1984", isbn"978-0-452-28423-4", pages328и publishedYear1949 - Создайте переменную с именем
cookbookтипаBookс title"The Joy of Cooking", isbn"978-0-7432-4626-2", subtitle"All About Baking", pages1132, publishedYear2006и genre"Cooking" - Создайте переменную с именем
techMagтипаMagazineс name"Tech Today", issueNumber45и monthlySubscriptiontrue - Создайте переменную с именем
scienceMagтипаMagazineс name"Science Weekly", issueNumber12, topic"Climate Change"и monthlySubscriptionfalse
Создайте функцию с именем getBookDetails, которая принимает параметр типа Book и возвращает string. Функция должна возвращать название книги и количество страниц в формате "[title] - [pages] pages".
Создайте функцию с именем getMagazineInfo, которая принимает параметр типа Magazine и возвращает string. Функция должна возвращать название журнала и номер выпуска в формате "[name] Issue #[issueNumber]".
Выведите следующие результаты в отдельных строках:
- Вызовите
getBookDetailsс аргументомnovelи выведите результат - Вызовите
getBookDetailsс аргументомcookbookи выведите результат - Вызовите
getMagazineInfoс аргументомtechMagи выведите результат - Вызовите
getMagazineInfoс аргументомscienceMagи выведите результат - Выведите ISBN переменной
novel - Выведите статус подписки
techMag(свойствоmonthlySubscription)
Попробуйте сами
// TODO: Напишите свой код здесь
// Создайте интерфейс Book
// Создайте интерфейс Magazine
// Создайте переменные, используя ваши интерфейсы
// Создайте функцию getBookDetails
// Создайте функцию getMagazineInfo
// Выведите требуемые результатыВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в TypeScript
1Начало работы с TS
Что такое TypeScript?Зачем использовать TypeScript?Ваш первый код на TypeScriptПроцесс компиляции и ошибкиИтоги: Введение в TS4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация стрелочных функцийТип возвращаемого значения 'void'Необязательные параметры с '?'Значения параметров по умолчаниюТипизация Rest-параметровОпределение типов функцийИтоги: Создание типизированных функций2Основные типы
Базовые типы: str, num, booleanТип 'any': лазейкаТип 'unknown'Работа с 'null' и 'undef'Вывод типов в действииЯвные аннотации типовИтоги: Практика по основным типам5Типы: псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения ('|')Работа с типами объединенияЛитеральные типыТипы пересечения ('&')Комбинирование псевдонимов типовИтоги: продвинутые комбинации типов3Структуры данных: массивы и кортежи
Типизированные массивыМодификатор 'readonly' для массивовЧто такое кортеж?Объявление кортежей и доступ к нимДеструктуризация кортежейКортежи readonlyМногомерные типизированные массивыОператор spread с массивамиИтоги: массивы и кортежи6Типизация объектов и интерфейсы
Встроенные аннотации типов объектовПсевдонимы типов для объектовВведение в интерфейсыИнтерфейсы против псевдонимов типовНеобязательные и Readonly свойстваРасширение интерфейсов и типовДобавление методов в интерфейсыИтоги: Определение структуры объектовПотренируйтесь самостоятельно: Онлайн-компилятор JavaScript