/** * Represents a Hand of cards. * * This class is IMMUTABLE */ import { Card } from "./Card"; export class Hand { constructor(readonly cards: readonly Card[]) {} addCards(...cards: Card[]): Hand { return new Hand([ ...this.cards, ...cards ]); } removeByIndex(i: number): Hand { if (i >= this.cards.length) { throw new Error(`Tried to remove invalid card from Hand by index: ${i}`); } return new Hand([ ...this.cards.slice().splice(i, 1) ]) } }