```ts
/**
 * Explodes a kit into its base parts, calculating the total count consumed for a given number of units.
 * @param catalog The workshop catalog mapping kit names to their recipes.
 * @param kit The name of the kit to explode.
 * @param want The number of units of the kit to produce.
 * @returns A mapping from base part to the total count consumed.
 */
export function explodeKit(catalog: Record<string, { makes: number; parts: [string, number][] }>, kit: string, want: number): Record<string, number> {
  if (want <= 0) {
    throw new Error("Want must be a positive number.");
  }

  const result: Record<string, number> = {};

  function explode(kitName: string, count: number): void {
    const recipe = catalog[kitName];
    if (!recipe) {
      throw new Error(`Kit "${kitName}" not found in catalog.`);
    }
    const runs = Math.ceil(count / recipe.makes);

    for (const [part, partCount] of recipe.parts) {
      const totalPartCount = partCount * runs;
      if (catalog[part]) {
        explode(part, totalPartCount);
      } else {
        result[part] = (result[part] || 0) + totalPartCount;
      }
    }
  }

  explode(kit, want);

  return result;
}
```