edgedb / edgedb-js

The official TypeScript/JS client library and query builder for EdgeDB
https://edgedb.com
Apache License 2.0
514 stars 65 forks source link

Fix `anyscalar` behavior in query builder #1089

Open scotttrinh opened 2 months ago

scotttrinh commented 2 months ago

In EdgeQL, anyscalar is a kind of generic that binds other usages to the same concrete type when applied rather than being a union of all scalar types as the name implies (and as we're currently treating it).

So, when we have a function or operator that uses anyscalar for two or more operands/arguments, the actual type is constrained as if all arguments agree on the instance of the generic. So more like:

function eq<T extends scalar>(l: T, r: T);

instead of

function eq(l: scalar, r: scalar);
// or
function eq<T extends scalar, U extends scalar>(l: T, r: U);
naaa760 commented 1 month ago

@scotttrinh :)

Hello , Please use a constraint such as {function eq<T extends scalar>(l: T, r: T);} to alter function signatures in order to enforce that all arguments share the same concrete type and so fix the anyscalar problem. In order to guarantee type consistency, remove any signatures that permit distinct types. To ensure that the desired behavior is followed and to avoid runtime problems, implement unit tests.