Помогите решить задачу. Пишу функцию конвертер, которая принимает объект и должна его конвертировать в другой объект. Делаю это так:
const converter = <T extends object, R>(obj: T): R => {
return Object.assign({}, ...Object.entries(obj)?.map(([k, v])=> {
if (k === 'type') {
return {[k]: v.toString()}
}
}))
}
Пример сильно упрощён, но Object.assign возвращает объект any, а как мне проверить, что возвращаемый объект может быть конвертирован в тип R? Функция используется рекурсивно.
=====================
Для проверки, может ли быть объект а конвертирован в б я использовал вот такой пример. Сразу оговорюсь, что в моём случае проверка типов не нужна, по этому она упущена.
type DeepKeys<T> = T extends object
? { [K in keyof T]: K extends string ? `${K & string}` : never }[keyof T]
: '';
type CanConvert<T, U> = DeepKeys<U> extends DeepKeys<T> ? U : never;
const converter = <T extends object, R>(obj: T): CanConvert<T, R> => {
return Object.assign({}, ...Object.entries(obj)?.map(([k, v])=> {
if (k === 'type') {
return {[k]: v.toString()}
}
}))
}
Теперь, в случае изменения структуры объекта А и невозможности получить на выходе нужный объект Б, я получу ошибку