Как сузить unknown до строки в условии TypeScript?

Проверьте typeof value === 'string'. Внутри этой ветки TypeScript понимает, что value имеет тип string, и разрешает вызов trim без небезопасного приведения.

Короткий ответ

Что ответить на собеседовании

Проверьте typeof value === 'string'. Внутри этой ветки TypeScript понимает, что value имеет тип string, и разрешает вызов trim без небезопасного приведения.

Подробный разбор

Ответ с пояснениями

Условие

Напишите условие функции normalize(value: unknown): string, которая возвращает обрезанную по краям строку, только если value является строкой. Для других значений возвращается пустая строка. Приведение через as и any использовать нельзя.

Ответ

Проверьте typeof value === 'string'. Внутри этой ветки TypeScript понимает, что value имеет тип string, и разрешает вызов trim без небезопасного приведения.

function normalize(value: unknown): string {
  if (typeof value === 'string') return value.trim();
  return '';
}

Проверка if (value) недостаточна: truthy может быть объект или число, а пустая строка — корректная строка, хотя falsy. Тесты: пробелы дают '', ' x ' даёт 'x', null, 5 и массив дают ''. Функция не пытается неявно преобразовать произвольные значения в текст.

Источник: www.typescriptlang.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее