diff --git a/declearn/utils/_dataclass.py b/declearn/utils/_dataclass.py
index 38e608adebbe53947e13f3b0db20587de3fa0d41..dc0c1b61ee6bd1c5ad438e10ebec46d6ac28d9e3 100644
--- a/declearn/utils/_dataclass.py
+++ b/declearn/utils/_dataclass.py
@@ -204,5 +204,7 @@ def _parameters_to_fields(
             ftype = Dict[str, ftype]  # type: ignore
             field.default_factory = dict
         # Append parsed information to the fields list.
-        fields.append((fname, ftype, field))
+        fields.append(
+            (fname, ftype, field)  # type: ignore  # update when py >=3.9
+        )
     return fields
diff --git a/declearn/utils/_toml_config.py b/declearn/utils/_toml_config.py
index a3c886021231c37d03934467d5797008e898d242..bbbbb550e7f6609510b9938a337345f8e7bd2303 100644
--- a/declearn/utils/_toml_config.py
+++ b/declearn/utils/_toml_config.py
@@ -139,7 +139,7 @@ def _instantiate_field(
     origin = typing.get_origin(field.type)
     # Case of a raw type.
     if origin is None:
-        return _instantiate(field.type)
+        return _instantiate(field.type)  # type: ignore  # update when py >=3.9
     # Case of a union of types (including optional).
     if origin is Union:
         for cls in typing.get_args(field.type):
@@ -284,7 +284,9 @@ class TomlConfig:
             Instantiated object that matches the field's specifications.
         """
         # Case of valid inputs: return them as-is (including valid None).
-        if _isinstance_generic(inputs, field.type):  # see function's notes
+        if _isinstance_generic(
+            inputs, field.type    # type: ignore  # update when py >=3.9
+        ):  # see function's notes
             return inputs
         # Case of None inputs: return default value if any, else raise.
         if inputs is None: