A cart summary combines typed items, a discount rule, and formatted output.

case study A small case study shows several TypeScript pieces working together around one data flow.

Cart Total Case

discountCents
cart.ts
Replay: real traced execution (multi-file project)
type CartItem = {
    name: string;
    cents: number;
    quantity: number;
};

function cartTotal(items: CartItem[], discountCents: number): number {
    let total: number = 0;

    for (const item of items) {
        total += item.cents * item.quantity;
    }

    return Math.max(0, total - discountCents);
}

const discountCents: number = 100;
const items: CartItem[] = [
    { name: "book", cents: 1200, quantity: 1 },
    { name: "pen", cents: 200, quantity: 3 }
];
const total: number = cartTotal(items, discountCents);

console.log(`cart=${total}`);
type CartItem = {
    name: string;
    cents: number;
    quantity: number;
};

function cartTotal(items: CartItem[], discountCents: number): number {
    let total: number = 0;

    for (const item of items) {
        total += item.cents * item.quantity;
    }

    return Math.max(0, total - discountCents);
}

const discountCents: number = 250;
const items: CartItem[] = [
    { name: "book", cents: 1200, quantity: 1 },
    { name: "pen", cents: 200, quantity: 3 }
];
const total: number = cartTotal(items, discountCents);

console.log(`cart=${total}`);
  1. discountCents ← 100, items ← [object Object],[object Object]

    14    return Math.max(0, total - discountCents);15}1617const discountCents→ 100: number = 100;  //@discountCents=25018const items→ [object Object],[object Object]: CartItem[] = [19    { name: "book", cents: 1200, quantity: 1 },20    { name: "pen", cents: 200, quantity: 3 }21];22const total: number = cartTotal(items[object Object],[object Object], discountCents100);
  2. total ← 0, item.cents ← 200

    4    quantity: number;5};67function cartTotal(items[object Object],[object Object]: CartItem[], discountCents100: number): number {8    let total→ 0: number = 0;910    for (const item of items) {11        total += item.cents→ 200 * item.quantity3;12    }1314    return Math.max(0, total - discountCents100);15}
  3. total ← 1700

    20    { name: "pen", cents: 200, quantity: 3 }21];22const total→ 1700: number = cartTotal(items[object Object],[object Object], discountCents100);2324console.log(`cart=${total1700}`);
    outputcart=1700
  1. discountCents ← 250, items ← [object Object],[object Object]

    14    return Math.max(0, total - discountCents);15}1617const discountCents→ 250: number = 250;18const items→ [object Object],[object Object]: CartItem[] = [19    { name: "book", cents: 1200, quantity: 1 },20    { name: "pen", cents: 200, quantity: 3 }21];22const total: number = cartTotal(items[object Object],[object Object], discountCents250);
  2. total ← 0, item.cents ← 200

    4    quantity: number;5};67function cartTotal(items[object Object],[object Object]: CartItem[], discountCents250: number): number {8    let total→ 0: number = 0;910    for (const item of items) {11        total += item.cents→ 200 * item.quantity3;12    }1314    return Math.max(0, total - discountCents250);15}
  3. total ← 1550

    20    { name: "pen", cents: 200, quantity: 3 }21];22const total→ 1550: number = cartTotal(items[object Object],[object Object], discountCents250);2324console.log(`cart=${total1550}`);
    outputcart=1550