Опциональные свойства в интерфейсах

Тренажер по TypeScript для пользователей с начальным уровнем подготовки.

Тренажер по TypeScript

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

Синтаксис:

interface User {
name: string;
age?: number;
}

Свойство age необязательно — можно создать объект { name: "Alex" } без ошибки.

  • Тип опционального свойства включает undefined
  • При обращении нужно проверять наличие значения
  • Опциональные свойства часто используются для конфигураций

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

Список тем

1. Сделай свойство опциональным

id: 40678_optional_01_replace

В этом задании вам нужно сделать указанные свойства интерфейса опциональными, добавив символ '?' после их названий. Интерфейс описывает профиль пользователя, но некоторые данные могут отсутствовать. Внесите изменения в код, чтобы он соответствовал требованиям опциональных свойств в TypeScript. Обратите внимание, что только два свойства должны стать опциональными, остальные остаются обязательными.

Заполните пропуски
interface UserProfile {
    name: string;
    age: number;
    email input1S string;
    phone input2S string;
    address: string;
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Найди ошибку в интерфейсе

id: 40678_optional_02_error

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

Найдите ошибку и исправьте
interface UserProfile {
    username: string;
    email: string?;
    age?: number;
}
 
const currentUser: UserProfile = {
    username: "alex",
    age: 25
};
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Выбери модификаторы свойств

id: 40678_optional_03_select

В этом задании вам предстоит заполнить пропуски в интерфейсе TypeScript, выбрав правильные модификаторы свойств из выпадающего списка. Интерфейс описывает объект пользователя, где некоторые свойства обязательны, другие опциональны, а третьи гарантированно будут инициализированы позже. Внимательно читайте комментарии к каждому свойству, чтобы определить, какой модификатор (?, ! или отсутствие модификатора) следует использовать. Всего нужно заполнить 4 пропуска, используя 3 варианта из списка.

Нужно правильно расставить в пропуски предложенные варианты
interface User {
  id: number;                     // Обязательное свойство
  usernameinput1S: string;        // Обязательное свойство
  emailinput2S: string;           // Опциональное свойство (может отсутствовать)
  isActiveinput3S: boolean;       // Утверждение, что будет инициализировано позже
  lastLogininput4S: Date;         // Опциональное свойство (может быть undefined)
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Собери интерфейс

id: 40678_optional_04_build

Из предложенных строк соберите корректный TypeScript-интерфейс с именем User, который включает обязательные свойства id (number), name (string), createdAt (Date) и опциональные свойства email (string) и age (number). Строки должны быть расположены в следующем порядке: сначала ключевое слово interface и имя, затем обязательные свойства, затем опциональные свойства, затем закрывающая фигурная скобка. Одна из строк является лишней и не должна входить в итоговый интерфейс.

Перетяните в правильном порядке строки из одного блока в другой
interface User {
    id: number;
    name: string;
    createdAt: Date;
    email?: string;
    age?: number;
}
    address: string;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Пройдёт ли проверку?

id: 40678_optional_05_predict

Проанализируйте код на TypeScript, содержащий интерфейс с обязательными и опциональными свойствами, а также объект, который пытается соответствовать этому интерфейсу. Определите, пройдёт ли проверка типов TypeScript для данного объекта, и выберите правильное объяснение из предложенных вариантов.

Выберите правильный вариант ответа
interface UserProfile {
  username: string;
  email: string;
  age?: number;
  isVerified?: boolean;
}

const newUser: UserProfile = {
  username: "alex123",
  email: "alex@example.com",
  age: 25,
  isVerified: true,
  country: "USA"
};
Сообщения
Проверить
Показать подсказку

6. Распредели свойства

id: 40678_optional_06_sort

Перед вами список свойств, объявленных в интерфейсе TypeScript. Ваша задача — распределить каждое свойство по одной из двух категорий: «Обязательные» или «Опциональные». Обратите внимание на синтаксис: опциональные свойства помечаются знаком вопроса (`?`) после имени. Всего нужно рассортировать 8 свойств. Перетащите каждый элемент в соответствующую категорию.

Перетяните элементы в соответствующие блоки
Обязательные
Опциональные
id: number
title?: string
createdAt: Date
updatedAt?: Date
description: string
tags?: string[]
isActive: boolean
priority?: number
Сообщения
Проверить
Показать подсказку

7. Отметь опциональные свойства

id: 40678_optional_07_click

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

Кликните по всем фрагментам, которые подходят под условие задания.
interface {{UserSettings~|~t0}} {
  {{userId~|~t1}}: {{number~|~t2}};
  {{username~|~t3}}: {{string~|~t4}};
  {{email?~|~t5}}: {{string~|~t6}};
  {{age?~|~t7}}: {{number~|~t8}};
  {{isActive~|~t9}}: {{boolean~|~t10}};
  {{lastLogin?~|~t11}}: {{Date~|~t12}};
  {{theme~|~t13}}: {{string~|~t14}};
}
Сообщения
Проверить
Показать подсказку

8. Какой тип у свойства?

id: 40678_optional_08_give

Дан интерфейс TypeScript с опциональным свойством. Проанализируйте код и определите, какой тип TypeScript будет иметь это свойство при обращении к нему (с учётом того, что оно опциональное). Введите ответ в виде типа TypeScript, например, 'string | undefined' (порядок типов в объединении может быть обратным).

Что должно получиться?
interface User {
  name: string;
  age?: number;
}

const user: User = { name: "Alice" };
const userAge = user.age; // какой тип у userAge?
Сообщения
Проверить
Показать подсказку

9. Порядок проверки свойства

id: 40678_optional_09_sequence

Перед вами строки TypeScript-кода, демонстрирующие безопасное обращение к опциональному свойству объекта. Строки перемешаны. Расставьте их в правильном порядке, чтобы получился корректный фрагмент программы, который объявляет интерфейс с опциональным свойством, создаёт объект, проверяет наличие этого свойства, использует его значение при наличии и обрабатывает случай, когда свойство отсутствует (undefined).

Расставьте строки в правильном порядке
if (person.phone !== undefined) {
  message = `Телефон: ${person.phone}`;
console.log(message);
} else { message = 'Телефон не указан'; }
let message: string;
interface Person { name: string; phone?: string; }
const person: Person = { name: 'Bob' };
Сообщения
Проверить
Показать подсказку

TypeScript: компиляция и запуск

id: 40678_compiler

В этом упражнении мы разберем, как сделать свойства интерфейса необязательными с помощью символа '?'. Это позволяет создавать гибкие структуры данных, где часть информации может отсутствовать. Попробуйте добавить в интерфейс 'Car' новое обязательное свойство, например 'vin', и посмотрите, как TypeScript сразу выдаст ошибку в существующих объектах. Экспериментируйте: уберите знак вопроса у 'color' или 'year', добавьте свои свойства в объекты и проверьте, как работает строгая проверка типов в реальном времени!

TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру