Menu
CoddyTech

Nullable-типы ('strictNull')

Часть раздела Введение в TypeScript путешествия по JavaScript на Coddy. Урок 71 из 73.

По умолчанию TypeScript позволяет присваивать null и undefined любому типу, что может привести к ошибкам во время выполнения. Опция компилятора strictNullChecks изменяет это поведение, делая null и undefined отдельными типами.

Когда включен параметр strictNullChecks, вы должны явно включить null или undefined в ваши аннотации типов, если хотите разрешить эти значения:

// Без strictNullChecks - это было бы разрешено
let name: string = null; // Ошибка при strictNullChecks!

// Со strictNullChecks - вы должны указывать явно
let name: string | null = null; // Теперь это работает

Это заставляет вас обрабатывать потенциальные значения null перед их использованием. Вы не можете вызывать методы или обращаться к свойствам значения, которое может быть null, без предварительной проверки:

function processName(name: string | null) {
  // Это вызовет ошибку
  // console.log(name.toUpperCase());
  
  // Сначала необходимо выполнить проверку
  if (name !== null) {
    console.log(name.toUpperCase()); // Безопасно для использования
  }
}

Этот параметр компилятора помогает предотвратить распространенные ошибки времени выполнения «Cannot read property of null», отлавливая их на этапе компиляции, что делает ваш код более надежным и предсказуемым.

challenge icon

Задание

Легко

Создайте функцию, которая безопасно обрабатывает данные профиля пользователя, которые могут содержать значения null. Эта задача демонстрирует, как strictNullChecks заставляет вас явно обрабатывать типы, допускающие значение null.

Создайте функцию с именем getUserDisplayName, которая:

  • Принимает параметр fullName типа string | null
  • Возвращает полное имя, если оно не null
  • Возвращает "Anonymous User", если полное имя равно null
  • Имеет явный тип возвращаемого значения string

Создайте вторую функцию с именем formatUserEmail, которая:

  • Принимает параметр email типа string | null
  • Возвращает email в нижнем регистре, если он не null
  • Возвращает "No email provided", если email равен null
  • Имеет явный тип возвращаемого значения string

Создайте третью функцию с именем getUserInfo, которая:

  • Принимает два параметра: name типа string | null и email типа string | null
  • Использует обе предыдущие функции для обработки параметров
  • Возвращает отформатированную строку: "Name: [processed name], Email: [processed email]"
  • Имеет явный тип возвращаемого значения string

Протестируйте свои функции со следующими данными:

  • Вызовите getUserDisplayName("John Smith") и выведите результат
  • Вызовите getUserDisplayName(null) и выведите результат
  • Вызовите formatUserEmail("ALICE@EXAMPLE.COM") и выведите результат
  • Вызовите formatUserEmail(null) и выведите результат
  • Вызовите getUserInfo("Bob Johnson", "bob@test.com") и выведите результат
  • Вызовите getUserInfo(null, null) и выведите результат
  • Вызовите getUserInfo("Sarah Wilson", null) и выведите результат

Попробуйте сами

// TODO: Напишите ваш код здесь
// Создайте функцию getUserDisplayName, которая принимает fullName (string | null) и возвращает string

// Создайте функцию formatUserEmail, которая принимает email (string | null) и возвращает string

// Создайте функцию getUserInfo, которая принимает name и email (оба string | null) и возвращает string

// Протестируйте функции и выведите результаты
console.log(getUserDisplayName("John Smith"));
console.log(getUserDisplayName(null));
console.log(formatUserEmail("ALICE@EXAMPLE.COM"));
console.log(formatUserEmail(null));
console.log(getUserInfo("Bob Johnson", "bob@test.com"));
console.log(getUserInfo(null, null));
console.log(getUserInfo("Sarah Wilson", null));
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Введение в TypeScript

Потренируйтесь самостоятельно: Песочница TypeScript