Think this is an OOP question... so the correct answer is to switch by the type of the instance. In PHP you do this with "instanceof", like here in MappingTest.php:

    protected function filterNumericFields(&$fields) {
        foreach ($this->view->field as $id => $field) {
          if (!($field instanceof NumericField)) {
            unset($fields[$id]);
          }
        }
      }

Note: dpm is bad with nested objects... you should set up a debugger like xdebug.

Another Note: Each content entity has a getFieldDefinitions method:


       /**
       * {@inheritdoc}
       */
      public function getFieldDefinitions() {
        if (!isset($this->fieldDefinitions)) {
          $this->fieldDefinitions = \Drupal::service('entity_field.manager')->getFieldDefinitions($this->entityTypeId, $this->bundle());
        }
        return $this->fieldDefinitions;
      }