Почему знак вопрос работает именно так?

Знак вопроса в языке TypeScript является одним из типов данных, который используется для представления возможности отсутствия значения у переменной. Этот тип данных называется "опциональным типом" и представлен символом "?".

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

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

Преимущества использования опционального типа в TypeScript:

1. Облегчает разработку и поддержку кода. Он позволяет явно указать, что значение может быть отсутствующим, что упрощает чтение и понимание кода другим программистам.

2. Улучшает безопасность типов. Если мы забываем проверить, не является ли значение "undefined", TypeScript сообщит нам об этом ошибке на этапе компиляции, что позволяет избежать потенциальных ошибок времени выполнения.

3. Повышает гибкость и возможности использования кода. Опциональные типы позволяют нам использовать один и тот же код для различных вариантов использования, не указывая значение каждого параметра.

Пример использования опционального типа в TypeScript:

function printName(firstName: string, lastName?: string) {
  if (lastName) {
    console.log(`Full name: ${firstName} ${lastName}`);
  } else {
    console.log(`First name only: ${firstName}`);
  }
}

printName("John"); // Output: First name only: John
printName("John", "Doe"); // Output: Full name: John Doe

В приведенном примере функция printName имеет необязательный параметр lastName, который представляет его как опциональный тип. Если мы передаем только один аргумент, то функция выводит только имя, а если передаем два аргумента, то функция выводит имя и фамилию.

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