Да: 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 читаются одинаково, но контракт допустимых вызовов различается.