diff --git a/core/modules/field/src/FieldUninstallValidator.php b/core/modules/field/src/FieldUninstallValidator.php
index b4666f30a6..69ddc5f725 100644
--- a/core/modules/field/src/FieldUninstallValidator.php
+++ b/core/modules/field/src/FieldUninstallValidator.php
@@ -53,11 +53,23 @@ public function validate($module) {
     if ($field_storages = $this->getFieldStoragesByModule($module)) {
       // Provide an explanation message (only mention pending deletions if there
       // remain no actual, non-deleted fields.)
+      $has_deleted = FALSE;
       $fields_in_use = [];
       foreach ($field_storages as $field_storage) {
-        if (!$field_storage->isDeleted()) {
-          $fields_in_use[$field_storage->getType()][] = $field_storage->getLabel();
+        // Check if the field is deleted or not and store the result for future
+        // use.
+        if ($field_storage->isDeleted()) {
+          $has_deleted = TRUE;
+          continue;
         }
+        // Check if the field storage has a dependency enforcement by the module
+        // and therefore should be deleted
+        $dependencies = $field_storage->get('dependencies');
+        if (isset($dependencies['enforced']['module']) && in_array($module, $dependencies['enforced']['module'])) {
+          continue;
+        }
+
+        $fields_in_use[$field_storage->getType()][] = $field_storage->getLabel();
       }
       if (!empty($fields_in_use)) {
         foreach ($fields_in_use as $field_type => $field_storages) {
@@ -65,7 +77,7 @@ public function validate($module) {
           $reasons[] = $this->formatPlural(count($fields_in_use[$field_type]), 'The %field_type_label field type is used in the following field: @fields', 'The %field_type_label field type is used in the following fields: @fields', ['%field_type_label' => $field_type_label, '@fields' => implode(', ', $field_storages)]);
         }
       }
-      else {
+      elseif ($has_deleted) {
         $reasons[] = $this->t('Fields pending deletion');
       }
     }
diff --git a/core/modules/system/tests/modules/entity_uninstall_validator/config/install/field.storage.entity_test_uninstall.field_test.yml b/core/modules/system/tests/modules/entity_uninstall_validator/config/install/field.storage.entity_test_uninstall.field_test.yml
new file mode 100644
index 0000000000..29a5dd70e3
--- /dev/null
+++ b/core/modules/system/tests/modules/entity_uninstall_validator/config/install/field.storage.entity_test_uninstall.field_test.yml
@@ -0,0 +1,22 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - entity_uninstall_validator
+    - text
+  enforced:
+    module:
+      - entity_uninstall_validator
+id: entity_test_uninstall.field_test
+field_name: field_test
+entity_type: entity_test_uninstall
+type: field_test
+settings:
+  max_length: 255
+module: text
+locked: false
+cardinality: 1
+translatable: true
+indexes: {  }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/core/modules/system/tests/modules/entity_uninstall_validator/entity_uninstall_validator.info.yml b/core/modules/system/tests/modules/entity_uninstall_validator/entity_uninstall_validator.info.yml
new file mode 100644
index 0000000000..03e4112881
--- /dev/null
+++ b/core/modules/system/tests/modules/entity_uninstall_validator/entity_uninstall_validator.info.yml
@@ -0,0 +1,9 @@
+name: 'Entity uninstall constraint test module'
+type: module
+description: 'Provides entity type, field type and other configuration to test module.'
+package: Testing
+version: VERSION
+dependencies:
+  - drupal:field
+  - drupal:text
+  - drupal:system
diff --git a/core/modules/system/tests/modules/entity_uninstall_validator/src/Entity/EntityTestUninstallConstraint.php b/core/modules/system/tests/modules/entity_uninstall_validator/src/Entity/EntityTestUninstallConstraint.php
new file mode 100644
index 0000000000..33bd5d3e01
--- /dev/null
+++ b/core/modules/system/tests/modules/entity_uninstall_validator/src/Entity/EntityTestUninstallConstraint.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace Drupal\entity_uninstall_validator\Entity;
+
+use Drupal\Core\Entity\ContentEntityBase;
+
+/**
+ * Defines the test entity class.
+ *
+ * @ContentEntityType(
+ *   id = "entity_test_uninstall",
+ *   label = @Translation("Entity Test"),
+ *   base_table = "entity_test_uninstall",
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "uuid" = "uuid",
+ *     "bundle" = "type",
+ *     "label" = "name",
+ *     "langcode" = "langcode",
+ *   }
+ * )
+ */
+class EntityTestUninstallConstraint extends ContentEntityBase {
+
+}
diff --git a/core/modules/system/tests/modules/entity_uninstall_validator/src/Plugin/Field/FieldType/FieldTestItem.php b/core/modules/system/tests/modules/entity_uninstall_validator/src/Plugin/Field/FieldType/FieldTestItem.php
new file mode 100644
index 0000000000..68ded2dbdd
--- /dev/null
+++ b/core/modules/system/tests/modules/entity_uninstall_validator/src/Plugin/Field/FieldType/FieldTestItem.php
@@ -0,0 +1,70 @@
+<?php
+
+namespace Drupal\entity_uninstall_validator\Plugin\Field\FieldType;
+
+use Drupal\Core\Field\FieldItemBase;
+use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\Core\StringTranslation\TranslatableMarkup;
+use Drupal\Core\TypedData\DataDefinition;
+use Drupal\Core\TypedData\DataDefinitionInterface;
+use Drupal\Core\TypedData\TypedDataInterface;
+
+/**
+ * Defines the 'field_test' entity field type.
+ *
+ * @FieldType(
+ *   id = "field_test",
+ *   label = @Translation("Test field item"),
+ *   description = @Translation("A field containing a plain string value."),
+ *   category = @Translation("Field"),
+ * )
+ */
+class FieldTestItem extends FieldItemBase {
+
+  /**
+   * Counts how many times all items of this type are saved.
+   *
+   * @var int
+   */
+  protected static $counter = [];
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
+    $properties['value'] = DataDefinition::create('string')
+      ->setLabel(new TranslatableMarkup('Test value'))
+      ->setRequired(TRUE);
+
+    return $properties;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function schema(FieldStorageDefinitionInterface $field_definition) {
+    return [
+      'columns' => [
+        'value' => [
+          'type' => 'varchar',
+          'length' => 255,
+        ],
+      ],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(DataDefinitionInterface $definition, $name = NULL, TypedDataInterface $parent = NULL) {
+    parent::__construct($definition, $name, $parent);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function delete() {
+    parent::delete();
+  }
+
+}
diff --git a/core/modules/system/tests/src/Kernel/Installer/UninstallKernelTest.php b/core/modules/system/tests/src/Kernel/Installer/UninstallKernelTest.php
index 12f050c8d4..c25c6b4066 100644
--- a/core/modules/system/tests/src/Kernel/Installer/UninstallKernelTest.php
+++ b/core/modules/system/tests/src/Kernel/Installer/UninstallKernelTest.php
@@ -48,4 +48,13 @@ public function testUninstallMedia() {
     \Drupal::service('module_installer')->uninstall(['file']);
   }
 
+  /**
+   * Test to ensure that FieldUninstallValidator doesn't cause issues when
+   * field storage config and entity are in same module.
+   */
+  public function testFieldUninstallConstraints() {
+    \Drupal::service('module_installer')->install(['entity_uninstall_validator']);
+    \Drupal::service('module_installer')->uninstall(['entity_uninstall_validator']);
+  }
+
 }
