You can also use TypedDict if you would normally use a raw dictionary but want the type checking.
TypedDict performs no checking by itself at runtime.
class A(TypedDict):
a: int
A(d=32)
# Returns {'d': 32}
typedload.load({'d': 32}, A)
# TypedloadValueError: Value does not contain fields: {'a'} which are necessary for type A