Как типизировать вложенный объект Typescript

Например, есть объект const obj = { a: 'table', b: { c: 'brown' }

Нужно забрать все ключи объекта и присвоить их в виде значений к другим ключам

Сам объект типизировал так type ObjType<K> = { key: keyof K; value: string; }

Не могу понять как типизировать вложенный объект и назначить key - value к ключам b и c?

Пробовал использовать type Partial<R> = { [P in keyof R]: R[P] } - не получилось, как я этот тип не крутил

Нужно получить массив объектов, [ {key: a, value: ""}, {key: b, value: "", items: {key: c, value: "" }}]


Ответы (1 шт):

Автор решения: Alexandroppolus

Вот, если я правильно поняд задачу: cсылка на Playground

Код:

type GetArgsTuple<F, R extends unknown[] = []> = F extends (() => infer X)
    ? F extends (infer A) & (() => X)
        ? GetArgsTuple<A, [X, ...R]>
        : R
    : R;

type UnionToTuple<U> = GetArgsTuple<
    (U extends unknown
        ? (a: () => U) => void
        : never) extends (a: infer P) => void ? P : never
>;


type GetNestedKeys<T> = UnionToTuple<{
    [K in keyof T]: T[K] extends Record<PropertyKey, unknown>
        ? {key: K; items: GetNestedKeys<T[K]>}
        : {key: K; value: T[K]};
}[keyof T]>



// ---- example --------

const obj = {
    a: 'table',
    b: { c: 'brown', f: () => true },
    e: {x: 'preved', y: 'medved', z: {v: 1}}
};

type NestedKeys = GetNestedKeys<typeof obj>;
→ Ссылка