Отличия в типизации двух функций

Да: input?: string разрешает вообще не передавать аргумент. input: string | undefined требует аргумент, хотя его значением может быть undefined.

Короткий ответ

Что ответить на собеседовании

Да: input?: string разрешает вообще не передавать аргумент. input: string | undefined требует аргумент, хотя его значением может быть undefined.

Подробный разбор

Ответ с пояснениями

Условие

Вопрос: существует ли различие в объявлении типов параметров у следующих функций?

const firstFn = (input?: string) => {
  console.log(input);
}

const secondFn = (input: string | undefined) => {
  console.log(input);
}

Ответ

Да: input?: string разрешает вообще не передавать аргумент. input: string | undefined требует аргумент, хотя его значением может быть undefined.

firstFn();            // допустимо
firstFn(undefined);   // допустимо
secondFn(undefined);  // допустимо
// secondFn();        // ошибка: ожидается аргумент

Это синтаксис TypeScript, а не обычного JavaScript. При строгой проверке null оба тела должны учитывать undefined. Типы удаляются при компиляции: в runtime пропущенный аргумент и явно переданный undefined читаются одинаково, но контракт допустимых вызовов различается.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее