@modern-kit/utils
Version:
1 lines • 1.76 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../src/common/getInValue/index.ts"],"sourcesContent":["type GetInValueReturnType<\n T,\n K extends string\n> = K extends `${infer First}.${infer Rest}`\n ? First extends keyof T\n ? GetInValueReturnType<T[First], Rest>\n : undefined\n : K extends keyof T\n ? T[K]\n : undefined;\n\ntype ObjectPath<T> = T extends Record<PropertyKey, any>\n ? {\n [K in keyof T]-?: K extends string\n ? T[K] extends Record<PropertyKey, any> | undefined\n ? `${K}` | `${K}.${ObjectPath<T[K]>}`\n : `${K}`\n : never;\n }[keyof T]\n : never;\n\n/**\n * @description 주어진 객체에서 주어진 키에 해당하는 값을 반환합니다.\n *\n * @param {T} obj - 객체\n * @param {K} key - 키\n * @returns {GetInValueReturnType<T, K>} 값\n *\n * @example\n * const obj = { a: { b: { c: 1 } } };\n *\n * getInValue(obj, 'a'); // { b: { c: 1 } }\n * getInValue(obj, 'a.b'); // { c: 1 }\n * getInValue(obj, 'a.b.c'); // 1\n * getInValue(obj, 'a.b.d'); // undefined\n */\nexport function getInValue<\n T extends Record<PropertyKey, any>,\n K extends ObjectPath<T>\n>(obj: T, key: K): GetInValueReturnType<T, K> {\n const paths = key.split('.');\n let result = obj;\n\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i];\n result = result[path];\n }\n\n return result as GetInValueReturnType<T, K>;\n}\n"],"names":[],"mappings":"AAoCO,SAAS,UAAA,CAGd,KAAQ,GAAA,EAAoC;AAC5C,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA;AAC3B,EAAA,IAAI,MAAA,GAAS,GAAA;AAEb,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,MAAA,GAAS,OAAO,IAAI,CAAA;AAAA,EACtB;AAEA,EAAA,OAAO,MAAA;AACT;;;;"}