Типы 

class UserLoginInfo(TypedDict):
    name: int


class ProjectUsersResponse(TypedDict):
    users: list[UserLoginInfo]
    canChangePassword: bool
    errorMessage: str | None

проверяем {'users': [{'name': '[Гость]'}, {'name': 'Агафонова Юлия Алексеевна'}, {'name': 'Адм'}, {'name': 'Администратор'}, {'name': 'Артеев Александр Юрьевич'}, 
{'name': 'Безпароля'}, {'name': 'Варфоломеев Артем Геннадьевич'}, {'name': 'Диспетчер'}, {'name': 'Казановский Дмитрий Николаевич'}, {'name': 'Михалева Любовь Ивановна'}, {'name': 'Наладчик'}, {'name': 'Оператор'}, {'nam
e': 'Пользователь1'}, {'name': 'Пользователь2'}, {'name': 'Разработчик'}, {'name': 'РБСWebOs5'}, {'name': 'Росалес Рафаэль Герардович'}, {'name': 'Спек$&+,/:;=?@<>#%{}|^~[]`'}, {'name': 'Спец_символы'}, {'name': 'Старший
 диспетчер'}, {'name': 'Стрелков Роман Анатольеви'}, {'name': 'тест'}, {'name': 'тестер'}, {'name': 'Тестировщик'}, {'name': 'Чекмесова Ирина Владимировна'}, {'name': 'Ямских Ирина Сергеевна'}, {'name': 'ag'}, {'name': '
Agav'}, {'name': 'change_pass'}, {'name': 'ChangePasswordBackendTest'}, {'name': 'ChangePasswordLocal'}, {'name': 'ForFrame'}, {'name': 'Lock_UnLock'}, {'name': 'LockedForce'}, {'name': 'QueryПользователь3'}, {'name': 'q
ueryUser1'}, {'name': 'Spec'}, {'name': 'Spec$&+,/:;=?@<>#%{}|^~[]`'}, {'name': 'Spec$&+,/:;=?@Спек'}, {'name': 'Test'}, {'name': 'TestBlock'}, {'name': 'tester'}, {'name': 'tester111'}, {'name': 'TestUsers'}, {'name': '
UserGroup1'}, {'name': 'UserGroup2'}, {'name': 'UserGroup3'}, {'name': 'UsersWoP1-11'}, {'name': 'UserWoP1'}, {'name': 'UserWoP2'}, {'name': 'UserWoP3'}, {'name': 'UserWoP4'}, {'name': 'UserWoP5'}, {'name': 'UserWoP6'}],
 'canChangePassword': True, 'errorMessage': None}


Функция проверки

def validate_scheme(data: Dict, dict_type: Type[TypedDict]) -> bool:
    type_hints = get_type_hints(dict_type)

    for key, required_type in type_hints.items():
        if key not in data:
            print(f"Отсутствует необходимый ключ {key}")
            return False

        # Проверка на список с возможным вложенным TypedDict
        if hasattr(required_type, 'args') and issubclass(required_type.args[0], TypedDict):
            if not isinstance(data[key], list):
                print(f"Ключ ‘{key}’ должен быть списком, но есть {type(data[key])}")
                return False
            for item in data[key]:
                if not isinstance(item, dict) or not validate_scheme(item, required_type.args[0]):
                    print(f"Элемент в списке ‘{key}’ не соответствует ожидаемому типу TypedDict")
                    return False

        elif hasattr(required_type, '__annotations__'):  # Это вложенный TypedDict
            if not isinstance(data[key], dict):
                print(f"Ключ ‘{key}’ должен быть словарем, но есть {type(data[key])}")
                return False
            if not validate_scheme(data[key], required_type):
                print(f"Ключ ‘{key}’ не прошел валидацию вложенного TypedDict")
                return False

        elif isinstance(required_type, type):  # Для простых типов
            if not isinstance(data[key], required_type):
                print(f"Несоответствие типа ключа ‘{key}’: ожидаемый {required_type}, найденный тип {type(data[key])}")
                return False

    # Проверка на лишние ключи
    extra_keys = set(data.keys()) - set(type_hints.keys())
    if extra_keys:
        print(f"Данные содержат дополнительные ключи, которые не определены в TypedDict: {extra_keys}")
        return False

    return True

должно приходить False так как name в проверяемом  словаре имеет тип str а не int как должно быть