diff --git a/core/lib/Drupal/Core/Datetime/Entity/DateFormat.php b/core/lib/Drupal/Core/Datetime/Entity/DateFormat.php
index 2cc01e8..c9361d6 100644
--- a/core/lib/Drupal/Core/Datetime/Entity/DateFormat.php
+++ b/core/lib/Drupal/Core/Datetime/Entity/DateFormat.php
@@ -16,6 +16,7 @@
  *
  * @ConfigEntityType(
  *   id = "date_format",
+ *   interface = "Drupal\Core\Datetime\DateFormatInterface",
  *   label = @Translation("Date format"),
  *   handlers = {
  *     "access" = "Drupal\system\DateFormatAccessControlHandler",
diff --git a/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php b/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php
index 6339c18..3973548 100644
--- a/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php
+++ b/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php
@@ -18,6 +18,7 @@
  *
  * @ConfigEntityType(
  *   id = "entity_form_display",
+ *   interface = "Drupal\Core\Entity\Display\EntityFormDisplayInterface",
  *   label = @Translation("Entity form display"),
  *   entity_keys = {
  *     "id" = "id",
diff --git a/core/lib/Drupal/Core/Entity/Entity/EntityFormMode.php b/core/lib/Drupal/Core/Entity/Entity/EntityFormMode.php
index 7f8371a..66936a1 100644
--- a/core/lib/Drupal/Core/Entity/Entity/EntityFormMode.php
+++ b/core/lib/Drupal/Core/Entity/Entity/EntityFormMode.php
@@ -29,6 +29,7 @@
  *
  * @ConfigEntityType(
  *   id = "entity_form_mode",
+ *   interface = "Drupal\Core\Entity\EntityFormModeInterface",
  *   label = @Translation("Form mode"),
  *   entity_keys = {
  *     "id" = "id",
diff --git a/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php b/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php
index 57041e9..184edcd 100644
--- a/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php
+++ b/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php
@@ -18,6 +18,7 @@
  *
  * @ConfigEntityType(
  *   id = "entity_view_display",
+ *   interface = "Drupal\Core\Entity\Display\EntityViewDisplayInterface",
  *   label = @Translation("Entity view display"),
  *   entity_keys = {
  *     "id" = "id",
diff --git a/core/lib/Drupal/Core/Entity/Entity/EntityViewMode.php b/core/lib/Drupal/Core/Entity/Entity/EntityViewMode.php
index 80a3875..373ae89 100644
--- a/core/lib/Drupal/Core/Entity/Entity/EntityViewMode.php
+++ b/core/lib/Drupal/Core/Entity/Entity/EntityViewMode.php
@@ -31,6 +31,7 @@
  *
  * @ConfigEntityType(
  *   id = "entity_view_mode",
+ *   interface = "Drupal\Core\Entity\EntityViewModeInterface",
  *   label = @Translation("View mode"),
  *   entity_keys = {
  *     "id" = "id",
diff --git a/core/lib/Drupal/Core/Entity/EntityType.php b/core/lib/Drupal/Core/Entity/EntityType.php
index 79c092e..431fe40 100644
--- a/core/lib/Drupal/Core/Entity/EntityType.php
+++ b/core/lib/Drupal/Core/Entity/EntityType.php
@@ -80,6 +80,13 @@ class EntityType implements EntityTypeInterface {
   protected $originalClass;
 
   /**
+   * The interface associated with the entity type.
+   *
+   * @var string
+   */
+  protected $interface;
+
+  /**
    * An array of handlers.
    *
    * @var array
@@ -347,6 +354,20 @@ public function setClass($class) {
   /**
    * {@inheritdoc}
    */
+  public function getInterface() {
+    return $this->interface;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setInterface($interface) {
+    $this->interface = $interface;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function isSubclassOf($class) {
     return is_subclass_of($this->getClass(), $class);
   }
diff --git a/core/lib/Drupal/Core/Entity/EntityTypeInterface.php b/core/lib/Drupal/Core/Entity/EntityTypeInterface.php
index 7e8662b..fb2d6b4 100644
--- a/core/lib/Drupal/Core/Entity/EntityTypeInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityTypeInterface.php
@@ -87,6 +87,13 @@ public function getClass();
   public function getOriginalClass();
 
   /**
+   * Returns the interface of the entity type.
+   *
+   * @return string
+   */
+  public function getInterface();
+
+  /**
    * Returns an array of entity keys.
    *
    * @return array
@@ -178,6 +185,14 @@ public function isPersistentlyCacheable();
   public function setClass($class);
 
   /**
+   * Sets the interface of the entity type.
+   *
+   * @param string $interface
+   *   The interface.
+   */
+  public function setInterface($interface);
+
+  /**
    * Determines if there is a handler for a given type.
    *
    * @param string $handler_type
diff --git a/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php b/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php
index 9fbe75c..59b8fcb 100644
--- a/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php
+++ b/core/lib/Drupal/Core/Field/Entity/BaseFieldOverride.php
@@ -20,6 +20,7 @@
  *
  * @ConfigEntityType(
  *   id = "base_field_override",
+ *   interface = "Drupal\Core\Field\FieldConfigInterface",
  *   label = @Translation("Base field override"),
  *   controllers = {
  *     "storage" = "Drupal\Core\Field\BaseFieldOverrideStorage"
diff --git a/core/modules/aggregator/src/Entity/Feed.php b/core/modules/aggregator/src/Entity/Feed.php
index 5a9317a..6f28222 100644
--- a/core/modules/aggregator/src/Entity/Feed.php
+++ b/core/modules/aggregator/src/Entity/Feed.php
@@ -19,6 +19,7 @@
  *
  * @ContentEntityType(
  *   id = "aggregator_feed",
+ *   interface = "Drupal\aggregator\FeedInterface",
  *   label = @Translation("Aggregator feed"),
  *   handlers = {
  *     "storage" = "Drupal\aggregator\FeedStorage",
diff --git a/core/modules/aggregator/src/Entity/Item.php b/core/modules/aggregator/src/Entity/Item.php
index 3f6cba0..dbdf194 100644
--- a/core/modules/aggregator/src/Entity/Item.php
+++ b/core/modules/aggregator/src/Entity/Item.php
@@ -20,6 +20,7 @@
  *
  * @ContentEntityType(
  *   id = "aggregator_item",
+ *   interface = "Drupal\aggregator\ItemInterface",
  *   label = @Translation("Aggregator feed item"),
  *   handlers = {
  *     "storage" = "Drupal\aggregator\ItemStorage",
diff --git a/core/modules/block/src/Entity/Block.php b/core/modules/block/src/Entity/Block.php
index ee977d0..8460d1c 100644
--- a/core/modules/block/src/Entity/Block.php
+++ b/core/modules/block/src/Entity/Block.php
@@ -20,6 +20,7 @@
  *
  * @ConfigEntityType(
  *   id = "block",
+ *   interface = "Drupal\block\BlockInterface",
  *   label = @Translation("Block"),
  *   handlers = {
  *     "access" = "Drupal\block\BlockAccessControlHandler",
diff --git a/core/modules/block_content/src/Entity/BlockContent.php b/core/modules/block_content/src/Entity/BlockContent.php
index 2d035ec..8bc1bd0 100644
--- a/core/modules/block_content/src/Entity/BlockContent.php
+++ b/core/modules/block_content/src/Entity/BlockContent.php
@@ -18,6 +18,7 @@
  *
  * @ContentEntityType(
  *   id = "block_content",
+ *   interface = "Drupal\block_content\BlockContentInterface",
  *   label = @Translation("Custom Block"),
  *   bundle_label = @Translation("Custom Block type"),
  *   handlers = {
diff --git a/core/modules/block_content/src/Entity/BlockContentType.php b/core/modules/block_content/src/Entity/BlockContentType.php
index 007ebfb..333f41b 100644
--- a/core/modules/block_content/src/Entity/BlockContentType.php
+++ b/core/modules/block_content/src/Entity/BlockContentType.php
@@ -17,6 +17,7 @@
  *
  * @ConfigEntityType(
  *   id = "block_content_type",
+ *   interface = "Drupal\block_content\BlockContentTypeInterface",
  *   label = @Translation("Custom block type"),
  *   handlers = {
  *     "form" = {
diff --git a/core/modules/comment/src/Entity/Comment.php b/core/modules/comment/src/Entity/Comment.php
index b49d993..5133c59 100644
--- a/core/modules/comment/src/Entity/Comment.php
+++ b/core/modules/comment/src/Entity/Comment.php
@@ -21,6 +21,7 @@
  *
  * @ContentEntityType(
  *   id = "comment",
+ *   interface = "Drupal\comment\CommentInterface",
  *   label = @Translation("Comment"),
  *   bundle_label = @Translation("Content type"),
  *   handlers = {
diff --git a/core/modules/comment/src/Entity/CommentType.php b/core/modules/comment/src/Entity/CommentType.php
index 3a1b3a8..4bc2962 100644
--- a/core/modules/comment/src/Entity/CommentType.php
+++ b/core/modules/comment/src/Entity/CommentType.php
@@ -16,6 +16,7 @@
  *
  * @ConfigEntityType(
  *   id = "comment_type",
+ *   interface = "Drupal\comment\CommentTypeInterface",
  *   label = @Translation("Comment type"),
  *   handlers = {
  *     "form" = {
diff --git a/core/modules/config/tests/config_test/src/Entity/ConfigQueryTest.php b/core/modules/config/tests/config_test/src/Entity/ConfigQueryTest.php
index 2cbdd91..54ae27b 100644
--- a/core/modules/config/tests/config_test/src/Entity/ConfigQueryTest.php
+++ b/core/modules/config/tests/config_test/src/Entity/ConfigQueryTest.php
@@ -12,6 +12,7 @@
  *
  * @ConfigEntityType(
  *   id = "config_query_test",
+ *   interface = "Drupal\config_test\ConfigTestInterface",
  *   label = @Translation("Test configuration for query"),
  *   handlers = {
  *     "storage" = "Drupal\config_test\ConfigTestStorage",
diff --git a/core/modules/config/tests/config_test/src/Entity/ConfigTest.php b/core/modules/config/tests/config_test/src/Entity/ConfigTest.php
index b022cc6..8e4219c 100644
--- a/core/modules/config/tests/config_test/src/Entity/ConfigTest.php
+++ b/core/modules/config/tests/config_test/src/Entity/ConfigTest.php
@@ -17,6 +17,7 @@
  *
  * @ConfigEntityType(
  *   id = "config_test",
+ *   interface = "Drupal\config_test\ConfigTestInterface",
  *   label = @Translation("Test configuration"),
  *   handlers = {
  *     "storage" = "Drupal\config_test\ConfigTestStorage",
diff --git a/core/modules/contact/src/Entity/ContactForm.php b/core/modules/contact/src/Entity/ContactForm.php
index 53476f7..f932f74 100644
--- a/core/modules/contact/src/Entity/ContactForm.php
+++ b/core/modules/contact/src/Entity/ContactForm.php
@@ -17,6 +17,7 @@
  *
  * @ConfigEntityType(
  *   id = "contact_form",
+ *   interface = "Drupal\contact\ContactFormInterface",
  *   label = @Translation("Contact form"),
  *   handlers = {
  *     "access" = "Drupal\contact\ContactFormAccessControlHandler",
diff --git a/core/modules/contact/src/Entity/Message.php b/core/modules/contact/src/Entity/Message.php
index bbccd17..41c9c40 100644
--- a/core/modules/contact/src/Entity/Message.php
+++ b/core/modules/contact/src/Entity/Message.php
@@ -17,6 +17,7 @@
  *
  * @ContentEntityType(
  *   id = "contact_message",
+ *   interface = "Drupal\contact\MessageInterface",
  *   label = @Translation("Contact message"),
  *   handlers = {
  *     "storage" = "Drupal\Core\Entity\ContentEntityNullStorage",
diff --git a/core/modules/editor/src/Entity/Editor.php b/core/modules/editor/src/Entity/Editor.php
index 29f7350..ff67be7 100644
--- a/core/modules/editor/src/Entity/Editor.php
+++ b/core/modules/editor/src/Entity/Editor.php
@@ -15,6 +15,7 @@
  *
  * @ConfigEntityType(
  *   id = "editor",
+ *   interface = "Drupal\editor\EditorInterface",
  *   label = @Translation("Text Editor"),
  *   entity_keys = {
  *     "id" = "format"
diff --git a/core/modules/field/src/Entity/FieldConfig.php b/core/modules/field/src/Entity/FieldConfig.php
index 2e5f329..a5379bc 100644
--- a/core/modules/field/src/Entity/FieldConfig.php
+++ b/core/modules/field/src/Entity/FieldConfig.php
@@ -19,6 +19,7 @@
  *
  * @ConfigEntityType(
  *   id = "field_config",
+ *   interface = "Drupal\field\FieldConfigInterface",
  *   label = @Translation("Field"),
  *   handlers = {
  *     "access" = "Drupal\field\FieldConfigAccessControlHandler",
diff --git a/core/modules/field/src/Entity/FieldStorageConfig.php b/core/modules/field/src/Entity/FieldStorageConfig.php
index 2044231..8d34d7b 100644
--- a/core/modules/field/src/Entity/FieldStorageConfig.php
+++ b/core/modules/field/src/Entity/FieldStorageConfig.php
@@ -20,6 +20,7 @@
  *
  * @ConfigEntityType(
  *   id = "field_storage_config",
+ *   interface = "Drupal\field\FieldStorageConfigInterface",
  *   label = @Translation("Field"),
  *   handlers = {
  *     "storage" = "Drupal\field\FieldStorageConfigStorage"
diff --git a/core/modules/field_ui/tests/modules/field_ui_test/src/Entity/FieldUITestNoBundle.php b/core/modules/field_ui/tests/modules/field_ui_test/src/Entity/FieldUITestNoBundle.php
index e7b2113..ce9ad84 100644
--- a/core/modules/field_ui/tests/modules/field_ui_test/src/Entity/FieldUITestNoBundle.php
+++ b/core/modules/field_ui/tests/modules/field_ui_test/src/Entity/FieldUITestNoBundle.php
@@ -14,6 +14,7 @@
  *
  * @ContentEntityType(
  *   id = "field_ui_test_no_bundle",
+ *   interface = "Drupal\Core\Entity\EntityInterface",
  *   label = @Translation("Test Field UI entity, no bundle"),
  *   entity_keys = {
  *     "id" = "id",
diff --git a/core/modules/file/src/Entity/File.php b/core/modules/file/src/Entity/File.php
index b21a182..a262cbd 100644
--- a/core/modules/file/src/Entity/File.php
+++ b/core/modules/file/src/Entity/File.php
@@ -20,6 +20,7 @@
  *
  * @ContentEntityType(
  *   id = "file",
+ *   interface = "Drupal\file\FileInterface",
  *   label = @Translation("File"),
  *   handlers = {
  *     "storage" = "Drupal\file\FileStorage",
diff --git a/core/modules/filter/src/Entity/FilterFormat.php b/core/modules/filter/src/Entity/FilterFormat.php
index 1f38428..9f5d80e 100644
--- a/core/modules/filter/src/Entity/FilterFormat.php
+++ b/core/modules/filter/src/Entity/FilterFormat.php
@@ -19,6 +19,7 @@
  *
  * @ConfigEntityType(
  *   id = "filter_format",
+ *   interface = "Drupal\filter\FilterFormatInterface",
  *   label = @Translation("Text format"),
  *   handlers = {
  *     "form" = {
diff --git a/core/modules/image/src/Entity/ImageStyle.php b/core/modules/image/src/Entity/ImageStyle.php
index 0579dbc..4f1702f 100644
--- a/core/modules/image/src/Entity/ImageStyle.php
+++ b/core/modules/image/src/Entity/ImageStyle.php
@@ -26,6 +26,7 @@
  *
  * @ConfigEntityType(
  *   id = "image_style",
+ *   interface = "Drupal\image\ImageStyleInterface",
  *   label = @Translation("Image style"),
  *   handlers = {
  *     "form" = {
diff --git a/core/modules/language/src/Entity/ConfigurableLanguage.php b/core/modules/language/src/Entity/ConfigurableLanguage.php
index 2f95b9e..6495719 100644
--- a/core/modules/language/src/Entity/ConfigurableLanguage.php
+++ b/core/modules/language/src/Entity/ConfigurableLanguage.php
@@ -22,6 +22,7 @@
  *
  * @ConfigEntityType(
  *   id = "configurable_language",
+ *   interface = "Drupal\language\ConfigurableLanguageInterface",
  *   label = @Translation("Language"),
  *   handlers = {
  *     "list_builder" = "Drupal\language\LanguageListBuilder",
diff --git a/core/modules/menu_link_content/src/Entity/MenuLinkContent.php b/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
index c39d156..00660d9 100644
--- a/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
+++ b/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
@@ -19,6 +19,7 @@
  *
  * @ContentEntityType(
  *   id = "menu_link_content",
+ *   interface = "Drupal\menu_link_content\MenuLinkContentInterface",
  *   label = @Translation("Custom menu link"),
  *   handlers = {
  *     "storage" = "Drupal\Core\Entity\Sql\SqlContentEntityStorage",
diff --git a/core/modules/migrate/src/Entity/Migration.php b/core/modules/migrate/src/Entity/Migration.php
index 9fb93b7..76b17d3 100644
--- a/core/modules/migrate/src/Entity/Migration.php
+++ b/core/modules/migrate/src/Entity/Migration.php
@@ -22,6 +22,7 @@
  *
  * @ConfigEntityType(
  *   id = "migration",
+ *   interface = "Drupal\migrate\Entity\MigrationInterface",
  *   label = @Translation("Migration"),
  *   module = "migrate",
  *   handlers = {
diff --git a/core/modules/node/src/Entity/Node.php b/core/modules/node/src/Entity/Node.php
index ef8c23b..d668761 100644
--- a/core/modules/node/src/Entity/Node.php
+++ b/core/modules/node/src/Entity/Node.php
@@ -21,6 +21,7 @@
  *
  * @ContentEntityType(
  *   id = "node",
+ *   interface = "Drupal\node\NodeInterface",
  *   label = @Translation("Content"),
  *   bundle_label = @Translation("Content type"),
  *   handlers = {
diff --git a/core/modules/node/src/Entity/NodeType.php b/core/modules/node/src/Entity/NodeType.php
index 73e1202..4e5259f 100644
--- a/core/modules/node/src/Entity/NodeType.php
+++ b/core/modules/node/src/Entity/NodeType.php
@@ -17,6 +17,7 @@
  *
  * @ConfigEntityType(
  *   id = "node_type",
+ *   interface = "Drupal\node\NodeTypeInterface",
  *   label = @Translation("Content type"),
  *   handlers = {
  *     "access" = "Drupal\node\NodeTypeAccessControlHandler",
diff --git a/core/modules/rdf/src/Entity/RdfMapping.php b/core/modules/rdf/src/Entity/RdfMapping.php
index b842547..c9dd9c2 100644
--- a/core/modules/rdf/src/Entity/RdfMapping.php
+++ b/core/modules/rdf/src/Entity/RdfMapping.php
@@ -16,6 +16,7 @@
  *
  * @ConfigEntityType(
  *   id = "rdf_mapping",
+ *   interface = "Drupal\rdf\RdfMappingInterface",
  *   label = @Translation("RDF mapping"),
  *   config_prefix = "mapping",
  *   entity_keys = {
diff --git a/core/modules/responsive_image/src/Entity/ResponsiveImageMapping.php b/core/modules/responsive_image/src/Entity/ResponsiveImageMapping.php
index 3e8440e..fd604f2 100644
--- a/core/modules/responsive_image/src/Entity/ResponsiveImageMapping.php
+++ b/core/modules/responsive_image/src/Entity/ResponsiveImageMapping.php
@@ -15,6 +15,7 @@
  *
  * @ConfigEntityType(
  *   id = "responsive_image_mapping",
+ *   interface = "Drupal\responsive_image\ResponsiveImageMappingInterface",
  *   label = @Translation("Responsive image mapping"),
  *   handlers = {
  *     "list_builder" = "Drupal\responsive_image\ResponsiveImageMappingListBuilder",
diff --git a/core/modules/search/src/Entity/SearchPage.php b/core/modules/search/src/Entity/SearchPage.php
index 28aa0f8..cecd390 100644
--- a/core/modules/search/src/Entity/SearchPage.php
+++ b/core/modules/search/src/Entity/SearchPage.php
@@ -21,6 +21,7 @@
  *
  * @ConfigEntityType(
  *   id = "search_page",
+ *   interface = "Drupal\search\SearchPageInterface",
  *   label = @Translation("Search page"),
  *   handlers = {
  *     "access" = "Drupal\search\SearchPageAccessControlHandler",
diff --git a/core/modules/shortcut/src/Entity/Shortcut.php b/core/modules/shortcut/src/Entity/Shortcut.php
index a3e15e7..00562ab 100644
--- a/core/modules/shortcut/src/Entity/Shortcut.php
+++ b/core/modules/shortcut/src/Entity/Shortcut.php
@@ -20,6 +20,7 @@
  *
  * @ContentEntityType(
  *   id = "shortcut",
+ *   interface = "Drupal\shortcut\ShortcutInterface",
  *   label = @Translation("Shortcut link"),
  *   handlers = {
  *     "access" = "Drupal\shortcut\ShortcutAccessControlHandler",
diff --git a/core/modules/shortcut/src/Entity/ShortcutSet.php b/core/modules/shortcut/src/Entity/ShortcutSet.php
index da60378..55f1ba9 100644
--- a/core/modules/shortcut/src/Entity/ShortcutSet.php
+++ b/core/modules/shortcut/src/Entity/ShortcutSet.php
@@ -16,6 +16,7 @@
  *
  * @ConfigEntityType(
  *   id = "shortcut_set",
+ *   interface = "Drupal\shortcut\ShortcutSetInterface",
  *   label = @Translation("Shortcut set"),
  *   handlers = {
  *     "storage" = "Drupal\shortcut\ShortcutSetStorage",
diff --git a/core/modules/system/entity.api.php b/core/modules/system/entity.api.php
index 09860a6..d003410 100644
--- a/core/modules/system/entity.api.php
+++ b/core/modules/system/entity.api.php
@@ -277,6 +277,8 @@
  *   content entity type that uses bundles, the 'bundle_label' annotation gives
  *   the human-readable name to use for a bundle of this entity type (for
  *   example, "Content type" for the Node entity).
+ * - The 'interface' annotation refers to an interface which the class should
+ *   implement.
  * - The annotation will refer to several controller classes, which you will
  *   also need to define:
  *   - list_builder: Define a class that extends
diff --git a/core/modules/system/src/Entity/Action.php b/core/modules/system/src/Entity/Action.php
index e48f335..1770a20 100644
--- a/core/modules/system/src/Entity/Action.php
+++ b/core/modules/system/src/Entity/Action.php
@@ -19,6 +19,7 @@
  *
  * @ConfigEntityType(
  *   id = "action",
+ *   interface = "Drupal\system\ActionConfigEntityInterface",
  *   label = @Translation("Action"),
  *   admin_permission = "administer actions",
  *   entity_keys = {
diff --git a/core/modules/system/src/Entity/Menu.php b/core/modules/system/src/Entity/Menu.php
index d44b698..e7763a8 100644
--- a/core/modules/system/src/Entity/Menu.php
+++ b/core/modules/system/src/Entity/Menu.php
@@ -16,6 +16,7 @@
  *
  * @ConfigEntityType(
  *   id = "menu",
+ *   interface = "Drupal\system\MenuInterface",
  *   label = @Translation("Menu"),
  *   handlers = {
  *     "access" = "Drupal\system\MenuAccessControlHandler"
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
index 1b065af..6eece05 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
@@ -19,6 +19,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Test entity"),
  *   handlers = {
  *     "list_builder" = "Drupal\entity_test\EntityTestListBuilder",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestBaseFieldDisplay.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestBaseFieldDisplay.php
index 84cc5f1..594aa6d 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestBaseFieldDisplay.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestBaseFieldDisplay.php
@@ -15,6 +15,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_base_field_display",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Test entity - base field display"),
  *   handlers = {
  *     "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestCache.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestCache.php
index 584a457..6d89cc6 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestCache.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestCache.php
@@ -12,6 +12,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_cache",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Test entity with field cache"),
  *   handlers = {
  *     "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestConstraintViolation.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestConstraintViolation.php
index e34bfd7..ea68206 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestConstraintViolation.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestConstraintViolation.php
@@ -14,6 +14,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_constraint_violation",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Test entity constraint violation"),
  *   handlers = {
  *     "form" = {
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestDefaultAccess.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestDefaultAccess.php
index 239250f..d20599b 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestDefaultAccess.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestDefaultAccess.php
@@ -12,6 +12,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_default_access",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Test entity with default access"),
  *   base_table = "entity_test",
  *   entity_keys = {
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestDefaultValue.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestDefaultValue.php
index 3779567..b02aed5 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestDefaultValue.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestDefaultValue.php
@@ -15,6 +15,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_default_value",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Test entity for default values"),
  *   base_table = "entity_test_default_value",
  *   fieldable = TRUE,
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestFieldOverride.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestFieldOverride.php
index f469275..26589b3 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestFieldOverride.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestFieldOverride.php
@@ -14,6 +14,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_field_override",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Test entity field overrides"),
  *   base_table = "entity_test_field_override",
  *   fieldable = TRUE,
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestLabel.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestLabel.php
index b392795..64a9ee1 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestLabel.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestLabel.php
@@ -12,6 +12,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_label",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Entity Test label"),
  *   handlers = {
  *     "view_builder" = "Drupal\entity_test\EntityTestViewBuilder"
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestLabelCallback.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestLabelCallback.php
index e15d389..1c4f98b 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestLabelCallback.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestLabelCallback.php
@@ -12,6 +12,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_label_callback",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Entity test label callback"),
  *   persistent_cache = FALSE,
  *   base_table = "entity_test",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMul.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMul.php
index 4e03fd1..a708e3a 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMul.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMul.php
@@ -16,6 +16,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_mul",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Test entity - data table"),
  *   handlers = {
  *     "view_builder" = "Drupal\entity_test\EntityTestViewBuilder",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMulRev.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMulRev.php
index 13aca32..6e778d7 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMulRev.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMulRev.php
@@ -16,6 +16,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_mulrev",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Test entity - revisions and data table"),
  *   handlers = {
  *     "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoId.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoId.php
index a0daadc..65264cb 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoId.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoId.php
@@ -12,6 +12,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_no_id",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Entity Test without id"),
  *   handlers = {
  *     "storage" = "Drupal\Core\Entity\ContentEntityNullStorage",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoLabel.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoLabel.php
index 5ad3ba7..833e082 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoLabel.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoLabel.php
@@ -12,6 +12,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_no_label",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Entity Test without label"),
  *   persistent_cache = FALSE,
  *   base_table = "entity_test",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestRev.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestRev.php
index f97d2fd..0043e5c 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestRev.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestRev.php
@@ -16,6 +16,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_rev",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Test entity - revisions"),
  *   handlers = {
  *     "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestStringId.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestStringId.php
index 98b19b0..d6ed058 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestStringId.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestStringId.php
@@ -14,6 +14,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_string_id",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Test entity with string_id"),
  *   handlers = {
  *     "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestUpdate.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestUpdate.php
index 9e792c7..67eb93d 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestUpdate.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestUpdate.php
@@ -17,6 +17,7 @@
  *
  * @ContentEntityType(
  *   id = "entity_test_update",
+ *   interface = "Drupal\Core\Entity\ContentEntityInterface",
  *   label = @Translation("Test entity update"),
  *   handlers = {
  *     "storage_schema" = "Drupal\entity_test\EntityTestStorageSchema"
diff --git a/core/modules/taxonomy/src/Entity/Term.php b/core/modules/taxonomy/src/Entity/Term.php
index fda4f52..52d8769 100644
--- a/core/modules/taxonomy/src/Entity/Term.php
+++ b/core/modules/taxonomy/src/Entity/Term.php
@@ -18,6 +18,7 @@
  *
  * @ContentEntityType(
  *   id = "taxonomy_term",
+ *   interface = "Drupal\taxonomy\TermInterface",
  *   label = @Translation("Taxonomy term"),
  *   bundle_label = @Translation("Vocabulary"),
  *   handlers = {
diff --git a/core/modules/taxonomy/src/Entity/Vocabulary.php b/core/modules/taxonomy/src/Entity/Vocabulary.php
index 44913f1..a298aea 100644
--- a/core/modules/taxonomy/src/Entity/Vocabulary.php
+++ b/core/modules/taxonomy/src/Entity/Vocabulary.php
@@ -17,6 +17,7 @@
  *
  * @ConfigEntityType(
  *   id = "taxonomy_vocabulary",
+ *   interface = "Drupal\taxonomy\VocabularyInterface",
  *   label = @Translation("Taxonomy vocabulary"),
  *   handlers = {
  *     "storage" = "Drupal\taxonomy\VocabularyStorage",
diff --git a/core/modules/tour/src/Entity/Tour.php b/core/modules/tour/src/Entity/Tour.php
index 55b94f1..bfdf7af 100644
--- a/core/modules/tour/src/Entity/Tour.php
+++ b/core/modules/tour/src/Entity/Tour.php
@@ -17,6 +17,7 @@
  *
  * @ConfigEntityType(
  *   id = "tour",
+ *   interface = "Drupal\tour\TourInterface",
  *   label = @Translation("Tour"),
  *   handlers = {
  *     "view_builder" = "Drupal\tour\TourViewBuilder"
diff --git a/core/modules/user/src/Entity/Role.php b/core/modules/user/src/Entity/Role.php
index 927b1c8..a4f32cf 100644
--- a/core/modules/user/src/Entity/Role.php
+++ b/core/modules/user/src/Entity/Role.php
@@ -16,6 +16,7 @@
  *
  * @ConfigEntityType(
  *   id = "user_role",
+ *   interface = "Drupal\user\RoleInterface",
  *   label = @Translation("Role"),
  *   handlers = {
  *     "storage" = "Drupal\user\RoleStorage",
diff --git a/core/modules/user/src/Entity/User.php b/core/modules/user/src/Entity/User.php
index ee75930..4d00e91 100644
--- a/core/modules/user/src/Entity/User.php
+++ b/core/modules/user/src/Entity/User.php
@@ -22,6 +22,7 @@
  *
  * @ContentEntityType(
  *   id = "user",
+ *   interface = "Drupal\user\UserInterface",
  *   label = @Translation("User"),
  *   handlers = {
  *     "storage" = "Drupal\user\UserStorage",
diff --git a/core/modules/views/src/Entity/View.php b/core/modules/views/src/Entity/View.php
index 1ad685a..bdc94b4 100644
--- a/core/modules/views/src/Entity/View.php
+++ b/core/modules/views/src/Entity/View.php
@@ -18,6 +18,7 @@
  *
  * @ConfigEntityType(
  *   id = "view",
+ *   interface = "Drupal\views\ViewStorageInterface",
  *   label = @Translation("View"),
  *   handlers = {
  *     "access" = "Drupal\views\ViewAccessControlHandler"
