Case Studies
Cart Total Case
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
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}`);
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);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}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
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);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}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