Как типизировать вложенный объект 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>;