Как стать автором
Обновить

Комментарии 10

Ждали этого коммента 😅
Серьезно, пора начать)

В исходных типах есть кортежи, которые после конвертации становятся массивами. Это норм.?

Это не кортежи, это такой массив 💁‍♂️
Если серьезно, хороший вопрос, я не думал о преобразовании кортежей (из наших 1000+ ручек ни одна не использует кортежи)
Вообще идея интересная, можно поресерчить, спасибо)

Наверное, можно пройтись по массиву через infer First, ...infer Rest, это должно сработать, как думаете?

В простых случаях - для кортежей с обязательными элементами - так обычно и делают.

Но у кортежа могут быть необязательные элементы и "хвост", например [string, number?, ...boolean[]], причем "хвост" ещё бывает в начале или в середине кортежа. Тут надо смотреть ключ "0", либо [...infer Rest, infer X].

из наших 1000+ ручек ни одна не использует кортежи

тогда можно не заморачиваться)

Вообще, обычный mapping-type корректно обходит все виды массивов и кортежей:

type KeysToCamelCase<T> = T extends readonly unknown[]
    ? {[K in keyof T]: KeysToCamelCase<T[K]>}
    : T extends Record<string, unknown>
        ? {[K in keyof T as CamelCase<K>]: KeysToCamelCase<T[K]>}
        : T;

поделить строку на три части — часть строки до нижнего подчеркивания, первую букву после и все остальное.

Не будет ли тут ошибки в ключах типа bite_a_cat?

Не будет, тк _cat ts распарсит как пустая строка + нижнее подчеркивание + cat, поэтому, если строка начинается с нижнего подчеркивания, для этой функции это тоже валидный snake_case

Но в данном случае KeysToCamelCase<GetUserResponse> потеряет информацию о том, что внутри у него CityOneCamel = KeysToCamelCase<CityOne> а не `{ cityOne: string }`. Тип конечно останется валидным и в таком примере не критичным, но если вложенность большая, а CityOne преобразованный в camelCase используется независимо, то соотносить это всё потом будет больно. Мы поэтому от такого решения отказались и ручками всё что имеет вложенность прописывали, хотя это тоже вариант не очень приятный.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий