explanation for an interface to deduct types of declarations