Closed hasithaweerasinghe closed 1 year ago
This feels like it's a bug in TypeScript actually. You can get the correct behavior by splitting the code into two statements:
const query = aql`FOR u in User FILTER ${name} == u.name RETURN u`; // type: GeneratedAqlQuery<any>
const results = await db.query(query); // type: ArrayCursor<any>
I'm investigating what is triggering this unexpected behavior in TypeScript.
With the help of @nikhil-varma we found multiple ways to force the intended behavior:
GeneratedAqlQuery
type so aql
casts its return value to AqlQuery
instead.query
that explicitly accepts a GeneratedAqlQuery
argument.[type]?: T
to [type]: T
.[type]?: T
to [type]?: T | any
.We went with the fourth solution as it forces the intended behavior without requiring major changes to the code or impacting backwards compatibility.
Thank you @pluma4345 & @nikhil-varma - @hasithaweerasinghe is off today and back Monday, so will try these fixes then and report back.
Hey everyone,
I hope you're doing well. I've recently encountered a type-related issue after updating ArangoJS from version 8.0.0 to 8.4.0 in our project. This issue pertains to the changes in type definitions that seem to have caused a regression in some core functionalities.
The return type of the above database query has been updated to (8.4.0)
Promise<ArrayCursor<undefined>>
, whereas in version 8.0.0, it wasPromise<ArrayCursor<any>>
. Although it is possible to specify a type for the AQL string handler, it appears that the default type ofany
is no longer functioning as expected.export declare function aql<T = any>(templateStrings: TemplateStringsArray, ...args: AqlValue[]): GeneratedAqlQuery<T>;
Following image shows the VScode intellisense types:
Thanks in advance!