Specification pattern implementation in TypeScript, adapted from @acanimal's Node Specification Pattern