Michal Srb
Michal Srb2h ago

v.optional generates incorrect TypeScript type in api

This code:
export const foo = query({
args: {
bla: v.optional(v.string()),
},
handler: async (ctx, args) => {}
});
export const foo = query({
args: {
bla: v.optional(v.string()),
},
handler: async (ctx, args) => {}
});
Generates correct type for foo:
const foo: RegisteredQuery<"public", {
bla?: ScopeName | undefined;
}, ....>
const foo: RegisteredQuery<"public", {
bla?: ScopeName | undefined;
}, ....>
But the type is incorrect (imprecise) in the api:
foo: FunctionReference<"query", "public", {
bla?: ScopeName;
}, ....>
foo: FunctionReference<"query", "public", {
bla?: ScopeName;
}, ....>
Notice that | undefined is missing. This is a different type, and it matters when compilerOptions.exactOptionalPropertyTypes is set to true in tsconfig. I'd guess it's a bug in Expand or in TS itself?
1 Reply
Convex Bot
Convex Bot2h ago
Thanks for posting in <#1088161997662724167>. Reminder: If you have a Convex Pro account, use the Convex Dashboard to file support tickets. - Provide context: What are you trying to achieve, what is the end-user interaction, what are you seeing? (full error message, command output, etc.) - Use search.convex.dev to search Docs, Stack, and Discord all at once. - Additionally, you can post your questions in the Convex Community's <#1228095053885476985> channel to receive a response from AI. - Avoid tagging staff unless specifically instructed. Thank you!

Did you find this page helpful?