Avatar ·

Что такое null/nil в TypeScript и как с ним работать?

Всем привет! Начал изучать TypeScript и столкнулся с путаницей в понимании null и undefined. В JavaScript я привык, что null — это явно заданное 'ничего', а undefined — неинициализированное значение. Но в TypeScript добавился ещё и тип nil? Или это одно и то же?

Проблема: в моём проекте есть функция, которая возвращает данные из базы данных. Если запись не найдена, я хочу вернуть null, но TypeScript ругается, что функция может вернуть undefined. Я пробовал использовать строгий режим (strictNullChecks: true) и явно указывать тип возвращаемого значения как string | null, но всё равно получаю ошибки при попытке обратиться к результату без проверки.

Пример кода:

function findUser(id: number): string | null {
  const user = database.get(id);
  if (!user) return null;
  return user.name;
}

const userName = findUser(123);
console.log(userName.toUpperCase()); // Ошибка: Object is possibly 'null'.

Ожидаю: я хочу понять, как правильно обрабатывать null и undefined в TypeScript, чтобы избежать таких ошибок. Есть ли разница между ними? Нужно ли использовать специальные операторы (например, ?? или !.) для безопасной работы? Или лучше вообще отказаться от null в пользу undefined? Буду благодарен за объяснение с примерами!