Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TypeScript types mismatch #11

Open
Newbie012 opened this issue Jan 9, 2024 · 1 comment
Open

TypeScript types mismatch #11

Newbie012 opened this issue Jan 9, 2024 · 1 comment

Comments

@Newbie012
Copy link

First, I want to say that your work on libpg-query-wasm is awe-inspiring! I maintain an open source plugin called SafeQL which heavily relies on pg-parser. Currently, it uses libpg-query but due to incompatibility with Windows, I was looking at your implementation.

While trying to migrate the code, I've stumbled across some issues that are related to TypeScript types:

1. Node's properties should be T | undefined instead of T | null | undefined

While I assume it's auto-generated from protobuf, All of the properties of pg_query.INode are both nullable and undefined-able, which is incorrect in runtime. They are never nullable, but only undefined-able:

image
image


2. Node properties are typed as their interfaces rather than their classes

For instance, when trying to access node.aConst, it will be typed as (property) pg_query.INode.aConst?: pg_query.IA_Const while it should be typed as pg_query.A_Const. Due to this incorrect type, TypeScript will throw an error:

image

while in runtime it should be fine:

image

@Hilzu
Copy link
Owner

Hilzu commented Jan 9, 2024

Thanks for the feedback! I agree the current types need improvement and it's a priority for this library.

I've tested several protobuf TypeScript libraries including protobufjs-cli (the current library), protoc-gen-ts (has an issue) and ts-proto (spike here). None are really ideal. I'm open to suggestions or contributions for better alternatives.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants