diff --git a/plugin/core/typing.py b/plugin/core/typing.py
index be399071a..038793c38 100644
--- a/plugin/core/typing.py
+++ b/plugin/core/typing.py
@@ -1,152 +1,65 @@
 import sys
-
-if sys.version_info >= (3, 11, 0):
-
-    from enum import Enum, IntEnum, IntFlag, StrEnum
-    from typing import Any
-    from typing import Callable
-    from typing import cast
-    from typing import Deque
-    from typing import Dict
-    from typing import final
-    from typing import Generator
-    from typing import Generic
-    from typing import IO
-    from typing import Iterable
-    from typing import Iterator
-    from typing import List
-    from typing import Literal
-    from typing import Mapping
-    from typing import NotRequired
-    from typing import Optional
-    from typing import ParamSpec
-    from typing import Protocol
-    from typing import Required
-    from typing import Sequence
-    from typing import Set
-    from typing import Tuple
-    from typing import Type
-    from typing import TYPE_CHECKING
-    from typing import TypedDict
-    from typing import TypeGuard
-    from typing import TypeVar
-    from typing import Union
-
+from enum import Enum, IntEnum, IntFlag  # noqa: F401
+from typing import (  # noqa: F401
+    IO,
+    TYPE_CHECKING,
+    Any,
+    Callable,
+    Deque,
+    Dict,
+    Generator,
+    Generic,
+    Iterable,
+    Iterator,
+    List,
+    Literal,
+    Mapping,
+    Optional,
+    Protocol,
+    Sequence,
+    Set,
+    Tuple,
+    Type,
+    TypedDict,
+    TypeVar,
+    Union,
+    cast,
+    final,
+)
+
+if sys.version_info >= (3, 11):
+    from enum import StrEnum  # noqa: F401
+    from typing import (  # noqa: F401
+        NotRequired,
+        ParamSpec,
+        Required,
+        TypeGuard,
+    )
 else:
+    _T = TypeVar("_T")
 
-    TYPE_CHECKING = False
-
-    def cast(typ, val):  # type: ignore
-        return val
-
-    def final(func):  # type: ignore
-        return func
+    class StrEnum(str, Enum):
+        """
+        Naive polyfill for Python 3.11's StrEnum.
 
-    def _make_type(name: str) -> '_TypeMeta':
-        return _TypeMeta(name, (Type,), {})  # type: ignore
+        See https://docs.python.org/3.11/library/enum.html#enum.StrEnum
+        """
 
-    class _TypeMeta(type):
-        def __getitem__(self, args: 'Any') -> 'Any':
-            if not isinstance(args, tuple):
-                args = (args,)
+        __format__ = str.__format__
+        __str__ = str.__str__
 
-            name = '{}[{}]'.format(
-                str(self),
-                ', '.join(map(str, args))
-            )
-            return _make_type(name)
-
-        def __str__(self) -> str:
-            return self.__name__
-
-    class Type(metaclass=_TypeMeta):  # type: ignore
+    class NotRequired(Type, Generic[_T]):  # type: ignore
         pass
 
-    class TypedDict(Type, dict):  # type: ignore
-        def __init__(*args, **kwargs) -> None:  # type: ignore
-            pass
-
-    class TypeGuard(Type):  # type: ignore
-        pass
-
-    class Enum(Type):  # type: ignore
-        pass
-
-    class IntEnum(Type):  # type: ignore
-        pass
-
-    class IntFlag(Type):  # type: ignore
-        pass
-
-    class StrEnum(Type):  # type: ignore
-        pass
-
-    class Any(Type):  # type: ignore
-        pass
-
-    class Callable(Type):  # type: ignore
-        pass
-
-    class Deque(Type):  # type: ignore
-        pass
-
-    class Dict(Type):  # type: ignore
-        pass
-
-    class Generic(Type):  # type: ignore
-        pass
-
-    class Generator(Type):  # type: ignore
-        pass
-
-    class IO(Type):  # type: ignore
-        pass
-
-    class Iterable(Type):  # type: ignore
-        pass
-
-    class Iterator(Type):  # type: ignore
-        pass
-
-    class List(Type):  # type: ignore
-        pass
-
-    class Literal(Type):  # type: ignore
-        pass
-
-    class Mapping(Type):  # type: ignore
-        pass
-
-    class Optional(Type):  # type: ignore
-        pass
-
-    class Set(Type):  # type: ignore
-        pass
-
-    class Tuple(Type):  # type: ignore
-        pass
-
-    class Union(Type):  # type: ignore
-        pass
-
-    class Protocol(Type):  # type: ignore
-        pass
-
-    class Sequence(Type):  # type: ignore
-        pass
-
-    class Required(Type):  # type: ignore
-        pass
-
-    class NotRequired(Type):  # type: ignore
-        pass
-
-    def TypeVar(*args, **kwargs) -> Any:  # type: ignore
-        return object
-
     class ParamSpec(Type):  # type: ignore
         args = ...
         kwargs = ...
 
         def __init__(*args, **kwargs) -> None:  # type: ignore
             pass
+
+    class Required(Type, Generic[_T]):  # type: ignore
+        pass
+
+    class TypeGuard(Type, Generic[_T]):  # type: ignore
+        pass