Условный тип
Условный тип выбирает один из двух вариантов в зависимости от того, подходит ли тип под условие. Синтаксис как у тернарного оператора:
Онлайн-редактор кода, разбор решения и отметки о прогрессе доступны после входа.
ВойтиСоздать аккаунт — бесплатноУсловный тип выбирает один из двух вариантов в зависимости от того, подходит ли тип под условие. Синтаксис как у тернарного оператора:
type IsArray<T> = T extends unknown[] ? "да" : "нет";
type A = IsArray<number[]>; // "да"
type B = IsArray<string>; // "нет"Здесь extends означает то же, что в ограничениях: «подходит под описание».
В задании тип-проверка, строка ли перед нами:
Ошибка: «Unused '@ts-expect-error' directive». IsString всегда равен boolean и параметр T вообще не использует. Поэтому для числа можно присвоить и true, и false, и последняя строка, которая должна была упасть, компилируется.
Ответ должен быть не «какой-то boolean», а конкретный литерал: true для строк и false для всего остального. В TypeScript true и false это отдельные типы, а boolean это их объединение.
Подробнее: Conditional Types — справочник TypeScript.
Перепиши IsString так, чтобы для строковых типов он давал true, а для остальных false. Значения и директиву @ts-expect-error менять не нужно.