Дима, просьба: если есть ошибки, выливай с --no-verify их. А то я запустил проверку типов, а ошибок нигде нет. Пришлось в коммитах искать и у сбея по файлам. Конечно, это не сложно, но все-таки по ошибкам проще. А проблема у тебя простая: тут какой тип? string | undefined А ты что передаешь? Массив строк здесь явно лишний. Да, в УРЛ GET-параметры могут быть не только просто строки, но и массивы. Вот если ты в титл хочешь передать, то тебе надо исключить массивы, или привести их к строке. Первый вариант: Здесь если есть значение и тип этого значения - строка, то ее и получаем. В противном случае undefined. То есть чтобы тут ни пришло кроме строки, оно будет заменено на undefined. Тайпскрипт такие конструкции понимает и здесь ему четко ясно: title - это строка или undefined. Обрати внимание на то, что здесь условие двойное. Первое - это проверка на значение. То есть если на вход придет пустая строка, она не будет соответствовать этому значению и в итоге будет undefined. Но ежели ты хочешь получать в том числе и пустую строку (что зависит от логики), то следует делать так: Здесь title может получить в том числе пустую строку. Второй вариант: Здесь, помимо предыдущей проверки, добавляется проверка на массив. Если значение - массив, то мы возвращаем его элементы, объединив запятой, используя метод Array.prototype.join(). Собственно, решение второй ошибки точно такое же.

Ага! Спасибо, теперь понял =)

Игорь, все верно, для доступа к свойствам объектам можно использовать точечную или скобочную нотацию. Но надо понимать между ними разницу: в скобочной ты щлесь передаешь переменную, которая может иметь разные значения, а в точечной у тебя не переменная передается, а именно само имя переменной. Вот этот урок тебе поможет лучше понять в чем тут твоя ошибка: Доступ к свойствам объектов через переменные.

Сергей, советую изучить Типы данных JavaScript и структуры данных. Массив (Array) - это не самостоятельный примитивный тип, а производный от Object. При этом Object и Array - это уже существующие объекты и они имеют самостоятельные методы (так же, как и объект Math имеет свои методы типа max, floor, random и т.п., часть из которых вы наверняка уже встречали ранее, например в этом и этом уроках). А привычное нам объявление переменных чаще всего является просто синтаксическим сахаром, например: И вот методы этих объектов (Array, Object, Number, Math и т.п.) могут быть использованы просто как самостоятельные функции для определенных задач. К примеру метод Array.isArray(variables) позволяет проверить является ли переменная массивом (typeof нам в этом не поможет, потому что typeof {} === "object" и typeof [] === "object"). А вот метод Object.freeze() вы наверняка недавно встречали в этом уроке: Предотвращение мутации объектов. При этом, как я там писал в замечании, это работает не только с объектами, но и с массивами (что и есть тоже суть объекты). Так вот, метод Object.keys() - это специальный метод, чтобы взять все ключи объекта и вернуть их в новом массиве. Напомню: суть объекта - это Структура Ключ-Значение. К примеру: Мы видим здесь у объекта три ключа (имена свойств) и по ним три значения. Вот в результате Object.keys(obj) мы получим массив со всеми этими ключами, то есть ['key1,' 'key2', 'key3']. А есть еще Object.values(), и он работает так же, только возвращает не ключи, а значения.

@Jean, не, тут так не сработало бы. Проблема как раз была в том, что было типа переведено, но очень коряво (машинный перевод), при этом оригинала не было. И перевод порой такой ужасный был, что реально было не понять.

@ Сергей Гуляев если что-то непереведено, то советую воспользоваться встроеным гугл переводчиком/ установить его как разшрирение для хром браузера. В свое время так проходил задания на freecodecamp