Function overloads in TypeScript