Выбор ответа Middle Задачи на типы обновлено
Разбор строки рекурсией
Вопрос
Какой тип у S?
type Split<S extends string, D extends string> =
S extends `${infer A}${D}${infer B}` ? [A, ...Split<B, D>] : [S];
type S = Split<'a.b.c', '.'>;
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: ['a', 'b', 'c']. На каждом шаге infer A берёт кусок до первого разделителя, а infer B весь остаток.
Варианты ответа
['a.b.c']string[]['a', 'b.c']['a', 'b', 'c']правильный ответ
Разбор
На каждом шаге infer A берёт кусок до первого разделителя, а infer B весь остаток. Для 'a.b.c' получается A = 'a', B = 'b.c', и рекурсия продолжает с остатком. Когда разделителей больше нет, срабатывает ветка [S]. Итог ['a', 'b', 'c'].
['a', 'b.c'] был бы без рекурсивного вызова. ['a.b.c'] получился бы, если бы образец не совпал сразу. string[] даёт встроенный String.prototype.split в рантайме, а тут тип вычисляется по литералу.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.