```typescript
/**
 * Total the base parts an order of a kit consumes.
 */
export function explodeKit(catalog: Record<string, { makes: number; parts: [string, number][] }>, kit: string, want: number): Record<string, number> {
  if (!Object.prototype.hasOwnProperty.call(catalog, kit)) {
    throw new Error(`the catalog does not define ${kit}`);
  }
  const totals: Record<string, number> = {};

  function calculateParts(k: string, quantity: number) {
    const recipe = catalog[k];
    const runs = Math.ceil(quantity / recipe.makes);

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

  calculateParts(kit, want);
  return totals;
}
```