{"record":{"id":"f05bd942ea180415","repo":"reflex-dev/reflex","slug":"expected-generic-type-of-fn-return-to-be-a-type","errorCode":null,"errorMessage":"Expected generic type of {fn_return} to be a type.","messagePattern":"Expected generic type of (.+?) to be a type\\.","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"packages/reflex-base/src/reflex_base/vars/base.py","lineNumber":3424,"sourceCode":"        fn = dispatchers[result_origin_var_type]\n        fn_types = get_type_hints(fn)\n        fn_first_arg_type = fn_types.get(\n            next(iter(inspect.signature(fn).parameters.values())).name, Any\n        )\n\n        fn_return = fn_types.get(\"return\", Any)\n\n        fn_return_origin = get_origin(fn_return) or fn_return\n\n        if fn_return_origin is not Var:\n            msg = f\"Expected return type of {fn.__name__} to be a Var, got {fn_return}.\"\n            raise TypeError(msg)\n\n        fn_return_generic_args = get_args(fn_return)\n\n        if not fn_return_generic_args:\n            msg = f\"Expected generic type of {fn_return} to be a type.\"\n            raise TypeError(msg)\n\n        arg_origin = get_origin(fn_first_arg_type) or fn_first_arg_type\n\n        if arg_origin is not Var:\n            msg = f\"Expected first argument of {fn.__name__} to be a Var, got {fn_first_arg_type}.\"\n            raise TypeError(msg)\n\n        arg_generic_args = get_args(fn_first_arg_type)\n\n        if not arg_generic_args:\n            msg = f\"Expected generic type of {fn_first_arg_type} to be a type.\"\n            raise TypeError(msg)\n\n        fn_return_type = fn_return_generic_args[0]\n\n        var = (\n            Var(\n                field_name,","sourceCodeStart":3406,"sourceCodeEnd":3442,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/packages/reflex-base/src/reflex_base/vars/base.py#L3406-L3442","documentation":"The first argument of a Var operator/attribute function must be annotated as a Var (or Var[...]); the validator raises TypeError when the first parameter's annotation origin is not Var.","triggerScenarios":"Defining an operator function whose first parameter is annotated as a plain Python type, e.g. def fn(v: str) -> Var[str].","commonSituations":"Custom operators written as if they operated on raw Python values instead of Vars.","solutions":["Annotate the first parameter as Var[...], e.g. v: Var[str]","Add from __future__ import annotations so string annotations resolve correctly"],"exampleFix":"# before\ndef shout(v: str) -> Var[str]: ...\n# after\ndef shout(v: Var[str]) -> Var[str]: ...","handlingStrategy":"type-guard","validationCode":"import inspect\nfrom typing import get_origin\nfrom reflex.vars import Var\nfirst = next(iter(inspect.signature(fn).parameters.values()))\nassert (get_origin(first.annotation) or first.annotation) is Var, 'first arg must be Var[...]'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Annotate operator inputs as Var[T], not raw Python types"],"tags":["reflex","type-annotation","operator-dispatch"],"backgroundTag":"callback-signature-mismatch","analyzedSha":"45b8ed5ab735f8a56bbb09a42384f030eb0208e7","analyzedAt":"2026-08-28T19:25:27.644Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}