Visitor pattern in TypeScript
Utilize TypeScript's static type-checking to make Visitor pattern possible in a dynamic language