Skip to content

Instantly share code, notes, and snippets.

import {Customer} from './customer';
import {Order} from './order';
export class OrderDiscounter {
constructor(public customer: Customer, public order: Order) {}
discountedAmount() {
return (100 - this.customer.discount()) * this.order.amount;
}
}
export class Order {
constructor(public amount: number) {}
}
import {Order} from './order';
export class Customer {
constructor(public orders: Order[]) {}
discount() {
if (this.orders.length > 5) {
return 10;
} else {
import {DiscountCalculator, Order} from './order';
export class Customer implements DiscountCalculator {
constructor(private orders: Order[]) {}
discount() {
if (this.orders.length > 5) {
return 10;
} else {
export class Order {
constructor(private discount: DiscountCalculator, private amount: number) {}
discountedAmount() {
return (100 - this.discount.discount()) * this.amount;
}
}
export interface DiscountCalculator {
import {Customer} from './customer';
export class Order {
constructor(private customer: Customer, private amount: number) {}
discountedAmount() {
return (100 - this.customer.discount()) * this.amount;
}
}
import {Order} from './order';
export class Customer {
constructor(private orders: Order[]) {}
discount() {
if (this.orders.length > 5) {
return 10;
} else {
const customerOrders = findOrdersBy(customerId); // instead of findOrdersByCustomer(customerId)
const userOrders = findOrdersBy(creatorId); // instead of findOrdersByCreator(creatorId)
function findOrdersBy(customerId: CustomerId): Order[];
function findOrdersBy(creatorId: UserId): Order[];
function findOrdersBy(id): Order[] {
...
}
export function findOrdersBy(customerId: string): Order[] {
...
}