ts-vista
Version:
An utility to enhance TypeScript
1 lines • 2.97 kB
Source Map (JSON)
{"version":3,"sources":["../src/functions/split.ts","../src/functions/pick.ts","../src/functions/omit.ts"],"sourcesContent":["import type { Omit } from \"#/@types/omit\";\n\ntype SplitResult<T extends object, K extends (keyof T)[]> = {\n within: Pick<T, K[number]>;\n without: Omit<T, K[number]>;\n};\n\nconst split = <T extends object, K extends (keyof T)[]>(\n object: T,\n keys: K,\n): SplitResult<T, K> => {\n const within: Partial<Pick<T, K[number]>> = {};\n const without: Partial<Omit<T, K[number]>> = {};\n\n for (const key in object) {\n if (keys.includes(key)) {\n within[key] = object[key];\n } else {\n (without as Partial<T>)[key] = object[key];\n }\n }\n\n return {\n within: within as Pick<T, K[number]>,\n without: without as unknown as Omit<T, K[number]>,\n };\n};\n\nexport type { SplitResult };\nexport { split };\n","import { split } from \"#/functions/split\";\n\n/**\n * From `object`, pick a set of properties whose keys are in `keys`.\n *\n * ### Example\n *\n * ```ts\n * import { pick } from \"ts-vista\";\n *\n * type Keys = {\n * a: number;\n * b: number;\n * c: number;\n * };\n *\n * type Keys2 = Pick<Keys, \"a\" | \"b\">;\n *\n * const keys: Keys = {\n * a: 1,\n * b: 2,\n * c: 3,\n * };\n *\n * const keys2: Keys2 = pick(keys, [\"a\", \"b\"]);\n * ```\n */\nconst pick = <T extends object, K extends (keyof T)[]>(\n object: T,\n keys: K,\n): Pick<T, K[number]> => {\n return split(object, keys).within;\n};\n\nexport { pick };\n","import type { Omit } from \"#/@types/omit\";\n\nimport { split } from \"#/functions/split\";\n\n/**\n * Construct an object with the properties of `object`\n * except for those in `keys`.\n *\n * ### Example\n *\n * ```ts\n * import type { Omit } from \"ts-vista\";\n *\n * import { omit } from \"ts-vista\";\n *\n * type Keys = {\n * a: number;\n * b: number;\n * c: number;\n * };\n *\n * type Keys2 = Omit<Keys, \"a\" | \"b\">;\n *\n * const keys: Keys = {\n * a: 1,\n * b: 2,\n * c: 3,\n * };\n *\n * const keys2: Keys2 = omit(keys, [\"a\", \"b\"]);\n * ```\n */\nconst omit = <T extends object, K extends (keyof T)[]>(\n object: T,\n keys: K,\n): Omit<T, K[number]> => {\n return split(object, keys).without;\n};\n\nexport { omit };\n"],"mappings":";;;;AAOA,IAAMA,QAAQ,wBACVC,QACAC,SAAAA;AAEA,QAAMC,SAAsC,CAAC;AAC7C,QAAMC,UAAuC,CAAC;AAE9C,aAAWC,OAAOJ,QAAQ;AACtB,QAAIC,KAAKI,SAASD,GAAAA,GAAM;AACpBF,aAAOE,GAAAA,IAAOJ,OAAOI,GAAAA;IACzB,OAAO;AACFD,cAAuBC,GAAAA,IAAOJ,OAAOI,GAAAA;IAC1C;EACJ;AAEA,SAAO;IACHF;IACAC;EACJ;AACJ,GAnBc;;;ACoBd,IAAMG,OAAO,wBACTC,QACAC,SAAAA;AAEA,SAAOC,MAAMF,QAAQC,IAAAA,EAAME;AAC/B,GALa;;;ACKb,IAAMC,OAAO,wBACTC,QACAC,SAAAA;AAEA,SAAOC,MAAMF,QAAQC,IAAAA,EAAME;AAC/B,GALa;","names":["split","object","keys","within","without","key","includes","pick","object","keys","split","within","omit","object","keys","split","without"]}