Опциональные параметры

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

Тренажер по TypeScript

Иногда функции могут работать и без передачи всех аргументов. Для таких случаев в TypeScript существуют опциональные параметры. Чтобы пометить параметр как необязательный, мы добавляем знак вопроса ? после его имени: function log(message?: string).

Важно помнить правило: обязательные параметры не могут следовать за опциональными. В теле функции такой параметр будет иметь тип Type | undefined, поэтому перед использованием его значения часто требуется проверка. Это позволяет писать гибкий код, который адаптируется под разные сценарии использования.

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

Список тем

1. Знак опциональности

id: 40653_ts_opt_replace_01

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

Заполните пропуски
function greet(name: string, greetinginput1S: string = 'Hello'): void {
    console.log(`${greeting}, ${name}!`);
}

greet('Alice');
greet('Bob', 'Hi');
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Порядок параметров

id: 40653_ts_opt_error_02

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

Найдите ошибку и исправьте
function greet(name?: string, message: string): string {
    return `${message}, ${name || 'Guest'}!`;
}
 
console.log(greet('Hello', 'John'));
console.log(greet(undefined, 'Welcome'));
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Вызов функции

id: 40653_ts_opt_select_fill_03

В этом задании вам предстоит заполнить пропуски в вызовах функции с опциональными параметрами. Функция `formatMessage` принимает обязательный параметр `text` (строка) и опциональный параметр `style` (строка). В зависимости от переданных аргументов функция возвращает отформатированное сообщение. Используйте выпадающие списки, чтобы выбрать подходящие значения для каждого вызова, учитывая, что опциональный параметр можно опустить или передать явно.

Нужно правильно расставить в пропуски предложенные варианты
function formatMessage(text: string, style?: string): string {
  if (style === 'uppercase') {
    return text.toUpperCase();
  } else if (style === 'lowercase') {
    return text.toLowerCase();
  }
  return text;
}

// Вызовы функции
const result1 = formatMessage(input1S);
const result2 = formatMessage(input2S, input3S);
const result3 = formatMessage(input4S, input5S);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Функция с проверкой

id: 40653_ts_opt_build_04

Из предложенных строк соберите корректную TypeScript-функцию, которая принимает опциональный параметр name типа string и выводит приветствие. Если параметр передан, функция выводит 'Hello, !', иначе - 'Hello, stranger!'. Обратите внимание: функция должна использовать проверку if (name). Не включайте в решение лишние строки.

Перетяните в правильном порядке строки из одного блока в другой
function greet(name?: string): void {
    if (name) {
        console.log(`Hello, ${name}!`);
    } else {
        console.log("Hello, stranger!");
    }
}
function greet(name: string): void {
    if (name === undefined) {
        console.log("Hello!");
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Результат при отсутствии аргумента

id: 40653_ts_opt_predict_05

Проанализируйте приведённый код на TypeScript. Обратите внимание на объявление функции с опциональным параметром. Что будет выведено в консоль при вызове функции без аргументов? Выберите один правильный вариант ответа.

Выберите правильный вариант ответа
function printName(name?: string): void {
    console.log("Name:", name);
}

printName();
Сообщения
Проверить
Показать подсказку

6. Поиск опциональных параметров

id: 40653_ts_opt_click_06

Внимательно изучите сигнатуру функции на TypeScript. Отметьте все параметры функции, которые являются опциональными (помечены знаком вопроса). Не отмечайте обязательные параметры, параметры со значениями по умолчанию, rest-параметры, имя функции, ключевые слова и типы.

Кликните по всем фрагментам, которые подходят под условие задания.
{{function~|~t0}} {{process~|~t1}}({{input: string~|~t2}}, {{delimiter?: string~|~t3}}, {{limit: number = 10~|~t4}}, {{strict?: boolean~|~t5}}, {{encoding?: string~|~t6}}, {{callback?: (result: string) => void~|~t7}}, {{...extras: any[]~|~t8}}){{: string~|~t9}};
Сообщения
Проверить
Показать подсказку

7. Логика обработки undefined

id: 40653_ts_opt_analyze_07

Проанализируйте TypeScript-код сверху и восстановите последовательность логических шагов выполнения программы. Шаги снизу перемешаны — расставьте их в правильном порядке, чтобы отразить, как программа обрабатывает вызов функции без аргумента и что выводит в консоль.

function greet(name?: string): void {
  if (name === undefined) {
    name = 'Guest';
  }
  console.log(`Hello, ${name}!`);
}

greet();
Расположите элементы в логичном порядке
Присваивание параметру name значения по умолчанию 'Guest'
Проверка условия: name === undefined (истина)
Вызов функции greet() без передачи аргумента
Вывод в консоль: 'Hello, Guest!'
Параметр name получает значение undefined
Сообщения
Проверить
Показать подсказку

8. Анатомия опционального параметра

id: 40653_ts_opt_highlight_08

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

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
function sendMessage(recipient: string, {{text~|~t1}}{{?~|~t2}}: {{string~|~t3}}, priority: number = 1) {
    // ... тело функции
}
Тип данных
Имя параметра
Знак вопроса
Сообщения
Проверить
Показать подсказку

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

id: 40653_compiler

Этот тренажер показывает использование опциональных параметров в функциях TypeScript. Вы можете увидеть, как функции ведут себя с разным количеством аргументов. Попробуйте: измените значения параметров, добавьте свои параметры, создайте новую функцию с опциональными аргументами. Экспериментируйте — удаляйте обязательные параметры или меняйте их местами, чтобы увидеть, как TypeScript помогает избежать ошибок.

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