```ts
export function explodeKit(catalog: Record<string, { makes: number; parts: [string, number][] }>, kit: string, want: number): Record<string, number> {
  if (want <= 0) throw new Error("Invalid want value");

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

  function chargeParts(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) {
      result[part] = (result[part] || 0) + partCount * runs;
    }

    for (const [subKit, subKitCount] of recipe.parts) {
      if (catalog[subKit]) {
        chargeParts(subKit, subKitCount * runs);
      }
    }
  }

  chargeParts(kit, want);
  return result;
}
```