Parwar YassinP
Convex Communityโ€ข4mo agoโ€ข
1 reply
Parwar Yassin

TypeScript Circular Reference Issue with Convex Internal Functions

hi guys i have a weird issue i provided the code in the img

The Problem ๐Ÿ›
When calling internal functions from public functions in the same Convex project, TypeScript creates a circular type dependency:

Error:
error TS7022: 'getProfile' implicitly has type 'any' because it does not
have a type annotation and is referenced directly or indirectly in its own initializer.

Why It Happens ๐Ÿค”
TypeScript tries to infer the return type of getProfile
To infer it, it needs to compile internal.agents.profiles.getProfile
But that's in the _generated/api which is generated FROM compiling this file
Chicken and egg problem โ†’ Circular dependency!
The Solution is in the img.

Why This Works โœจ
returns: validator โ†’ Runtime validation + type inference
: Promise<any> on handler โ†’ Breaks the circular TypeScript compilation
According to Convex Docs ๐Ÿ“š
Public functions: Validators recommended for security
Internal functions: Validators are optional (but we use them for stricter type safety)
Handler type annotations: Not mentioned in docs (because it's a TS edge case)
TL;DR
When calling internal functions from public functions in the same project:

โœ… Add returns: validators to ALL functions
โœ… Add : Promise<any> to handlers that call ctx.runQuery/runMutation on internal functions
code.png
code1.png
Was this page helpful?