typescript interface function overloading