В TypeScript, как и в JavaScript, существуют два особых значения, обозначающих отсутствие данных: null и undefined. Однако их смысловая нагрузка различается, что важно учитывать при разработке надежных приложений.
undefined— переменная была объявлена, но ей еще не присвоено значение. Это состояние «неопределенности» по умолчанию.null— это намеренное отсутствие значения. Вы явно указываете, что переменная «пуста».
При включенной опции strictNullChecks (строгие проверки на null), TypeScript запрещает присваивать null или undefined переменным других типов (например, number), если это явно не разрешено через объединение типов. Это помогает избежать классических ошибок времени выполнения. В этом уроке мы разберем синтаксис, отличия и правильное использование этих типов в коде.
- Модуль 1: Введение в TypeScript
- Модуль 2: Примитивные типы
- Тип string.
- Тип number.
- Тип boolean.
- Типы null и undefined.
- Тип symbol.
- Тип bigint.
- Модуль 3: Специальные типы
- Модуль 4: Массивы
- Модуль 5: Кортежи (Tuples)
- Модуль 6: Объекты
- Модуль 7: Функции
- Модуль 8: Union типы
- Модуль 9: Литеральные типы
- Модуль 10: Type Aliases
- Модуль 11: Интерфейсы
- Модуль 12: Type Guards и Narrowing
- Модуль 13: Enums
- Модуль 14: Классы
- Модуль 15: Generics — основы
- Модуль 16: Generics — ограничения
- Модуль 17: Utility Types — базовые
- Модуль 18: Utility Types — работа с Union
- Модуль 19: Utility Types — функции
- Модуль 20: Type Assertions
- Модуль 21: Keyof и Typeof операторы
- Модуль 22: Mapped Types
- Модуль 23: Conditional Types
- Модуль 24: Discriminated Unions
- Модуль 25: Модули и типы
- Модуль 26: Declaration Files
- Модуль 27: Типизация асинхронного кода
- Модуль 28: Практические паттерны
1. Проверка типов
В этом задании представлен короткий фрагмент кода на TypeScript, использующий оператор typeof для проверки типов значений null и undefined. Проанализируйте код и определите, какие строки будут выведены в консоль после его выполнения. Выберите правильный вариант из предложенных ниже.
console.log(typeof null);
console.log(typeof undefined);2. Явное присваивание
В этом задании вам нужно объявить переменную, которая должна хранить пустое значение. Используйте тип null и присвойте переменной значение null. Дополните код, вписав в пропуски правильные значения, чтобы код успешно компилировался и выводил ожидаемый результат.
let emptyValue: input1S = input2S;
console.log(emptyValue);3. Строгие проверки
В этом задании вам нужно правильно указать тип параметра функции. Функция `processValue` принимает один параметр, который может быть числом или `undefined`. Выберите из списка подходящий тип (union type) для параметра `value`. Обратите внимание, что в теле функции есть проверка на `undefined`, что подсказывает возможные типы значения.
function processValue(value: input1S) {
if (value === undefined) {
console.log("Value is undefined");
} else {
console.log(`The number is ${value}`);
}
}4. Ошибка инициализации
В этом фрагменте кода TypeScript переменная используется в математической операции без предварительной инициализации, что приводит к неожиданному результату. Найдите строку с ошибкой и исправьте её, задав переменной начальное значение или добавив проверку на undefined.
let price: number;let taxRate = 0.2;let total = price + (price * taxRate);console.log('Total:', total);5. Распределение значений
Перед вами список выражений и значений на TypeScript, связанных с типами null, undefined и void. Разнесите их по двум категориям: 'Явное отсутствие значения' (null) и 'Значение не задано' (undefined/void). Обратите внимание, что null используется для явного указания на отсутствие значения, а undefined и void связаны с неопределённым значением или отсутствием возвращаемого значения функции. Каждый элемент должен оказаться в одной из двух категорий.
nulllet x = null;function getNull(): null { return null; }const y: null = null;undefinedlet z;function doSomething(): void { }void 06. Жизненный цикл переменной
Проанализируйте TypeScript-код сверху и восстановите последовательность логических шагов выполнения программы. Шаги снизу перемешаны — расставьте их в правильном порядке, чтобы отразить жизненный цикл переменной: от объявления до очистки.
let userData: string | null | undefined;
console.log('Шаг 1:', userData);
userData = 'Иван Иванов';
console.log('Шаг 2:', userData);
userData = undefined;
console.log('Шаг 3:', userData);
userData = 'Анна Петрова';
console.log('Шаг 4:', userData);
userData = null;
console.log('Шаг 5:', userData);