Visitor pattern in TypeScript

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