Проверьте typeof value === 'string'. Внутри этой ветки TypeScript понимает, что value имеет тип string, и разрешает вызов trim без небезопасного приведения.
Как сузить unknown до строки в условии TypeScript?
Проверьте 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.