diff --git a/core/lib/Drupal/Core/Cache/UnchangingCacheableDependencyTrait.php b/core/lib/Drupal/Core/Cache/UnchangingCacheableDependencyTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..437c7cb9dc6c2d10f621c6b667e12c837c1d202f
--- /dev/null
+++ b/core/lib/Drupal/Core/Cache/UnchangingCacheableDependencyTrait.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Cache\UnchangingCacheableDependencyTrait.
+ */
+
+namespace Drupal\Core\Cache;
+
+/**
+ * Trait to implement CacheableDependencyInterface for unchanging objects.
+ *
+ * @see \Drupal\Core\Cache\CacheableDependencyInterface
+ */
+trait UnchangingCacheableDependencyTrait {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheContexts() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheTags() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheMaxAge() {
+    return Cache::PERMANENT;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php b/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php
index ff46e3e302cd77b5fb7c2590c380d831beabd591..dfe912e545c5f7c63945d9e883976a8be5328e5f 100644
--- a/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php
+++ b/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\Core\Entity\Entity;
 
-use Drupal\Core\Cache\CacheableDependencyInterface;
 use Drupal\Core\Entity\EntityDisplayPluginCollection;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Entity\Display\EntityFormDisplayInterface;
@@ -178,13 +177,8 @@ public function buildForm(FieldableEntityInterface $entity, array &$form, FormSt
         // Associate the cache tags for the field definition & field storage
         // definition.
         $field_definition = $this->getFieldDefinition($name);
-        if ($field_definition instanceof CacheableDependencyInterface) {
-          $this->renderer->addDependency($form[$name], $field_definition);
-        }
-        $field_storage_definition = $field_definition->getFieldStorageDefinition();
-        if ($field_storage_definition instanceof CacheableDependencyInterface) {
-          $this->renderer->addDependency($form[$name], $field_storage_definition);
-        }
+        $this->renderer->addDependency($form[$name], $field_definition);
+        $this->renderer->addDependency($form[$name], $field_definition->getFieldStorageDefinition());
       }
     }
 
diff --git a/core/lib/Drupal/Core/Field/BaseFieldDefinition.php b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
index 244f25b670e35fb7197341368251d78f57c6f676..3d72b6ffa745a9bf10d774f64b5ba06294071de4 100644
--- a/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
+++ b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Core\Field;
 
+use Drupal\Core\Cache\UnchangingCacheableDependencyTrait;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Field\Entity\BaseFieldOverride;
 use Drupal\Core\Field\TypedData\FieldItemDataDefinition;
@@ -18,6 +19,8 @@
  */
 class BaseFieldDefinition extends ListDataDefinition implements FieldDefinitionInterface, FieldStorageDefinitionInterface {
 
+  use UnchangingCacheableDependencyTrait;
+
   /**
    * The field type.
    *
diff --git a/core/lib/Drupal/Core/Field/FieldDefinitionInterface.php b/core/lib/Drupal/Core/Field/FieldDefinitionInterface.php
index 1698b7739570db25f49c8d33d82c5098fbb67fe3..e4f47b22518b31595efa3ee331fac6ed0eeb6317 100644
--- a/core/lib/Drupal/Core/Field/FieldDefinitionInterface.php
+++ b/core/lib/Drupal/Core/Field/FieldDefinitionInterface.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Core\Field;
 
+use Drupal\Core\Cache\CacheableDependencyInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\TypedData\ListDataDefinitionInterface;
 
@@ -52,7 +53,7 @@
  * based on that abstract definition, even though that abstract definition can
  * differ from the concrete definition of any particular node's body field.
  */
-interface FieldDefinitionInterface extends ListDataDefinitionInterface {
+interface FieldDefinitionInterface extends ListDataDefinitionInterface, CacheableDependencyInterface {
 
   /**
    * Returns the machine name of the field.
diff --git a/core/lib/Drupal/Core/Field/FieldStorageDefinitionInterface.php b/core/lib/Drupal/Core/Field/FieldStorageDefinitionInterface.php
index 396e70dbc6bf20e65a4cce4718f7e2ea11d66b47..3d15bca53ac3ffb6957c2e872c7c233939289280 100644
--- a/core/lib/Drupal/Core/Field/FieldStorageDefinitionInterface.php
+++ b/core/lib/Drupal/Core/Field/FieldStorageDefinitionInterface.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Core\Field;
 
+use Drupal\Core\Cache\CacheableDependencyInterface;
 use Drupal\Core\Entity\FieldableEntityInterface;
 
 /**
@@ -27,7 +28,7 @@
  *
  * @see hook_entity_field_storage_info()
  */
-interface FieldStorageDefinitionInterface {
+interface FieldStorageDefinitionInterface extends CacheableDependencyInterface {
 
   /**
    * Value indicating a field accepts an unlimited number of values.