@modern-kit/utils
Version:
23 lines (21 loc) • 1.01 kB
TypeScript
type GetInValueReturnType<T, K extends string> = K extends `${infer First}.${infer Rest}` ? First extends keyof T ? GetInValueReturnType<T[First], Rest> : undefined : K extends keyof T ? T[K] : undefined;
type ObjectPath<T> = T extends Record<PropertyKey, any> ? {
[K in keyof T]-?: K extends string ? T[K] extends Record<PropertyKey, any> | undefined ? `${K}` | `${K}.${ObjectPath<T[K]>}` : `${K}` : never;
}[keyof T] : never;
/**
* @description 주어진 객체에서 주어진 키에 해당하는 값을 반환합니다.
*
* @param {T} obj - 객체
* @param {K} key - 키
* @returns {GetInValueReturnType<T, K>} 값
*
* @example
* const obj = { a: { b: { c: 1 } } };
*
* getInValue(obj, 'a'); // { b: { c: 1 } }
* getInValue(obj, 'a.b'); // { c: 1 }
* getInValue(obj, 'a.b.c'); // 1
* getInValue(obj, 'a.b.d'); // undefined
*/
declare function getInValue<T extends Record<PropertyKey, any>, K extends ObjectPath<T>>(obj: T, key: K): GetInValueReturnType<T, K>;
export { getInValue };