Как правильно определить опциональный тип?

В TypeScript есть возможность определить опциональные типы с помощью символа "?". Это позволяет указать, что конкретное значение может быть как определенного типа, так и undefined.

Для определения опционального типа, вы можете использовать символ "?" после имени переменной в ее объявлении. Например:

let myOptionalValue: string | undefined;

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

Опциональные типы могут быть использованы не только для переменных, но и для параметров функций и свойств объектов. Например:

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

printName("John"); // выводит "First Name: John"
printName("John", "Doe"); // выводит "Full Name: John Doe"

В этом примере параметр "lastName" функции "printName" объявлен как опциональный, указав символ "?" после его имени. При вызове функции вы можете передать только один аргумент "firstName", и функция будет работать без ошибок, выводя только имя. Если вы передадите оба аргумента, функция выведет полное имя.

Также в TypeScript используется оператор "!" для отметки переменных как опциональных, но при этом имеющих гарантированное значение, чтобы избежать ошибок компиляции. Этот оператор называется Non-null assertion operator. Например:

let myOptionalValue!: string;

В этом примере "myOptionalValue" отмечено как опциональная переменная типа "string", но без символа "?". Оператор "!" говорит TypeScript, что значение будет присвоено позже и гарантированно не будет равным undefined. Это может быть полезно, когда вы уверены, что переменная получит значение до ее использования.

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