Дима, привет!

Не путай Eslint и TypeScript. Это совершенно разные вещи и ругать каждого может решаться по-разному (хотя и бывают пересекающиеся ошибки). В данном случае у тебя ругается именно TS.

>> надо привести это добро к string[], но не приводиться...
Вопрос: а зачем тебе приводить к string[]? Что ты из этого получишь? Разбитая строка по разделителю-запятой да, будет массивом строк. Но прежде чем ее разбить, надо чтобы она была строкой. А ты смотрел какой тип у тебя у переменной query.coords? Спойлер: string | string[] | undefined. То есть у тебя из УРЛ уже на вход либо пусто, либо строка, либо массив строк. Да, УРЛ может в переменной нести массив, а не строку. Так вот, при этом ты пытаешься сразу вызывать coordsline.split(','), а метода split у массива нет. Вот тебе ТС и ругается, что нет такого метода. Что примечательно, у тебя выше строчкой вызывается query.coords.slice(1), и тут ошибки нет, но прикол в том, что метод slice есть и у строки и у массива, и тот и другой на выходе возвращает массив, поэтому там ошибки и не возникло. Вот если бы ты попытался вызвать splice (который есть только у массива, но не у строки), вот тогда бы еще там ошибка возникла.

В общем, суть решения таких задач - это не всегда приведение к каким-то типам как таковым, но уточнение по типу. В данном случае у тебя на вход string | string[] | undefined. Но ты знаешь, что тебе нужна только строка. Вот и добавь условие if(typeof query.coords === "string"). В таком случае дальше по коду ТС уже понимает, что здесь в области действия условия уже может быть только строка, но не что-то другое.

Данная задача на самом деле довольно сложная, поэтому я сильно сомневался, что ты ее решишь. Но голову поломать с ней полезно. Вот ПР. Только не иди пока дальше. Сначала изучи подробно этот вариант, и скорее всего дня три. Поиграйся как следует и пойми каждую строчку кода в src/pages/Cities/City. Пока не поймешь, нет смысла двигаться дальше. Это все важные и распространенные моменты.