diff --git a/Source/Core/Core/HW/WiimoteEmu/Extension/DesiredExtensionState.h b/Source/Core/Core/HW/WiimoteEmu/Extension/DesiredExtensionState.h
index a61da143bc..f2d100bc48 100644
--- a/Source/Core/Core/HW/WiimoteEmu/Extension/DesiredExtensionState.h
+++ b/Source/Core/Core/HW/WiimoteEmu/Extension/DesiredExtensionState.h
@@ -17,21 +17,42 @@
 #include "Core/HW/WiimoteEmu/Extension/TaTaCon.h"
 #include "Core/HW/WiimoteEmu/Extension/Turntable.h"
 #include "Core/HW/WiimoteEmu/Extension/UDrawTablet.h"
+#include "Core/HW/WiimoteEmu/ExtensionPort.h"
 
 namespace WiimoteEmu
 {
 struct DesiredExtensionState
 {
 private:
+  template <ExtensionNumber N, typename T>
+  struct ExtNumTypePair
+  {
+    static constexpr ExtensionNumber ext_num = N;
+    using ext_type = T;
+  };
+
   template <typename... Ts>
   struct ExtDataImpl
   {
-    using type = std::variant<std::monostate, typename Ts::DesiredState...>;
+    using type = std::variant<std::monostate, typename Ts::ext_type::DesiredState...>;
+
+    static_assert((std::is_same_v<std::variant_alternative_t<Ts::ext_num, type>,
+                                  typename Ts::ext_type::DesiredState> &&
+                   ...),
+                  "Please use ExtensionNumber enum order for DTM file index consistency.");
   };
 
 public:
-  using ExtensionData = ExtDataImpl<Nunchuk, Classic, Guitar, Drums, Turntable, UDrawTablet,
-                                    DrawsomeTablet, TaTaCon, Shinkansen>::type;
+  using ExtensionData =
+      ExtDataImpl<ExtNumTypePair<ExtensionNumber::NUNCHUK, Nunchuk>,
+                  ExtNumTypePair<ExtensionNumber::CLASSIC, Classic>,
+                  ExtNumTypePair<ExtensionNumber::GUITAR, Guitar>,
+                  ExtNumTypePair<ExtensionNumber::DRUMS, Drums>,
+                  ExtNumTypePair<ExtensionNumber::TURNTABLE, Turntable>,
+                  ExtNumTypePair<ExtensionNumber::UDRAW_TABLET, UDrawTablet>,
+                  ExtNumTypePair<ExtensionNumber::DRAWSOME_TABLET, DrawsomeTablet>,
+                  ExtNumTypePair<ExtensionNumber::TATACON, TaTaCon>,
+                  ExtNumTypePair<ExtensionNumber::SHINKANSEN, Shinkansen>>::type;
 
   ExtensionData data = std::monostate{};
 };