This is important to get the typing information from the compiler and not reimplement this functionality as it is quite complex