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», отлавливая их на этапе компиляции, что делает ваш код более надежным и предсказуемым.
Задание
ЛегкоСоздайте функцию, которая безопасно обрабатывает данные профиля пользователя, которые могут содержать значения 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));В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Введение в TypeScript
1Начало работы с TS
Что такое TypeScript?Зачем использовать TypeScript?Ваш первый код на TypeScriptПроцесс компиляции и ошибкиИтоги: Введение в TS4Работа с функциями
Типизация параметров и возвращаемых значенийТипизация стрелочных функцийТип возвращаемого значения 'void'Необязательные параметры с '?'Значения параметров по умолчаниюТипизация Rest-параметровОпределение типов функцийИтоги: Создание типизированных функций2Основные типы
Базовые типы: str, num, booleanТип 'any': лазейкаТип 'unknown'Работа с 'null' и 'undef'Вывод типов в действииЯвные аннотации типовИтоги: Практика по основным типам5Типы: псевдонимы, объединения и пересечения
Псевдонимы типов для примитивовТипы объединения ('|')Работа с типами объединенияЛитеральные типыТипы пересечения ('&')Комбинирование псевдонимов типовИтоги: продвинутые комбинации типов8Перечисления (Enums)
Что такое числовое перечисление?Использование числовых перечисленийЧто такое строковое перечисление?Использование строковых перечисленийГетерогенные перечисленияИтоги: использование перечислений11Продвинутые темы
Утверждения типовType Guards: in и instanceofТип 'never'Nullable-типы ('strictNull')Индексные сигнатуры для объектовИтоги: Тонкая настройка типов3Структуры данных: массивы и кортежи
Типизированные массивыМодификатор 'readonly' для массивовЧто такое кортеж?Объявление кортежей и доступ к нимДеструктуризация кортежейКортежи readonlyМногомерные типизированные массивыОператор spread с массивамиИтоги: массивы и кортежиПотренируйтесь самостоятельно: Песочница TypeScript