crystal
crystal copied to clipboard
TypeScript regression: loadOne no longer inferring types
See: https://www.typescriptlang.org/play/?#code/JYWwDg9gTgLgBAbzgYwgOxgUwB4wDRwA2EAhgCYDyamBhwAzvAL5wBmUEIcARAOZQlWJRtwDcAKFCRYiOAHVgMABYAFXgGE6mDHBbtOPAAJkSMEmEIk0AejC8x48WUzJLUTHF7EARiUKJxODhrazhMejoMAFoyBhJvQkwo6lwoyI9DGABPMHDkKGAwGCjwyJhrNAhkkhBwsBJkTEC4NBq6ho8AcQEhRgCgoOAMTCghRrh1dCxcfoGgjggYNU1gbRgALnlFVQ0tDAk5pmajo-FUND7kGGw4AF4UKZwYAAoASglzvoX4e6vsADpeJgXtxvss9jBuO9gqEAILIRr0egAZSwYAAPAplODVhgAHxndB9AAkWD692I5ComGedEYzwA2t8ALqvAhoACuhEI7K5PLgwiyaGQcGeECK9Fedzxs1Y0FFn3g4qVrDgyslsyCITmAwAegB+ZpBRVwMG7XE-NVFBkABmZBwG2r1hqCR3mwI5UDQcAZ9vETHe4iAA
Reported by @purge
import { context, loadOne, list } from "grafast";
import { WithPgClient } from "@dataplan/pg";
declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace Grafast {
interface Context {
rootPgClient: WithPgClient;
}
}
}
const ctx = context();
const root = ctx.get("rootPgClient"); // AccessStep<WithPgClient>
const $test = loadOne(list([root]), async (opts) => {
for (const opt of opts) {
// ^? opt: unknown < Should be `UnwrapPlanTuple<...>`
const rootPgClient = opt[0];
// ^? rootPgClient: any < Should be WithPgClient
}
return [];
});
(This was working fine in previous releases of Grafast, in particular beta.8 I think worked.)