{"record":{"id":"f5d8fdd449b84b2c","repo":"reflex-dev/reflex","slug":"expected-var-return-type-of-fn-name-to-have","errorCode":null,"errorMessage":"Expected Var return type of {fn.__name__} to have a generic type.","messagePattern":"Expected Var return type of (.+?) to have a generic type\\.","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"packages/reflex-base/src/reflex_base/vars/base.py","lineNumber":3367,"sourceCode":"    Raises:\n        TypeError: If the return type of the function is not a Var.\n        TypeError: If the Var return type does not have a generic type.\n        ValueError: If a function for the generic type is already registered.\n    \"\"\"\n    types = get_type_hints(fn)\n    return_type = types[\"return\"]\n\n    origin = get_origin(return_type)\n\n    if origin is not Var:\n        msg = f\"Expected return type of {fn.__name__} to be a Var, got {origin}.\"\n        raise TypeError(msg)\n\n    generic_args = get_args(return_type)\n\n    if not generic_args:\n        msg = f\"Expected Var return type of {fn.__name__} to have a generic type.\"\n        raise TypeError(msg)\n\n    generic_type = get_origin(generic_args[0]) or generic_args[0]\n\n    if generic_type in dispatchers:\n        msg = f\"Function for {generic_type} already registered.\"\n        raise ValueError(msg)\n\n    dispatchers[generic_type] = fn\n\n    return fn\n\n\ndef dispatch(\n    field_name: str,\n    var_data: VarData,\n    result_var_type: GenericType,\n    existing_var: Var | None = None,\n) -> Var:","sourceCodeStart":3349,"sourceCodeEnd":3385,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/packages/reflex-base/src/reflex_base/vars/base.py#L3349-L3385","documentation":"The operator-dispatch registration requires a fully generic return annotation Var[T]; a bare -> Var without a generic parameter cannot tell reflex which Python type the dispatcher handles.","triggerScenarios":"Annotating the dispatch function's return as plain Var (no [T]) when registering it in the dispatcher table.","commonSituations":"Custom operator functions written quickly with a bare Var return type.","solutions":["Change the return annotation to a parameterized Var, e.g. -> Var[int] or -> Var[str]","Add from __future__ import annotations if typing forward references were the issue"],"exampleFix":"# before\ndef to_title(v: Var[str]) -> Var: ...\n# after\ndef to_title(v: Var[str]) -> Var[str]: ...","handlingStrategy":"type-guard","validationCode":"from typing import get_args\nassert get_args(fn.__annotations__['return']), 'Var return must be parameterized (Var[T])'","typeGuard":"def returns_parameterized_var(fn) -> bool:\n    from typing import get_origin, get_args\n    from reflex.vars import Var\n    rt = fn.__annotations__.get('return')\n    return get_origin(rt) is Var and bool(get_args(rt))","tryCatchPattern":null,"preventionTips":["Never use bare Var in annotations for dispatch functions"],"tags":["reflex","type-annotation","generics"],"backgroundTag":"missing-generic-type-argument","analyzedSha":"45b8ed5ab735f8a56bbb09a42384f030eb0208e7","analyzedAt":"2026-08-28T19:25:27.644Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}