tatethurston/TwirpScript

Are there any plans to natively support `int64`?

antonioorct opened this issue · 3 comments

I think right now proto's int64 in js has the type of string. Maybe if you could support it by using js' BigInt type or something similar?

Totally. I punted on making a decision here until someone had a use case. A number of libraries use https://github.com/dcodeIO/Long.js/, but I think that is because they predate general support for BigInt.

BigInt looks well supported https://caniuse.com/bigint https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt so I'll implement it. Down the road if someone prefers to use strings I can enable type overrides pretty easily, but BigInt seems like the correct default.

One call out: BigInt doesn't JSON serialize natively. This will require add custom JSON serialization to TwirpScript, which is a breaking change. Running yarn twirpscript to regenerate pb.ts files should be the only action needed to resolve.

On a related note, @antonioorct what are your thoughts on using Map instead of an object literal as the generated type for maps? This would be a breaking change because Map has a different interface than a plain JavaScript object.

The motivation is that keys in JS object literals are strings, where Map preserves the type -- this is relevant in the case where you use a bigint as the key.

@tatethurston well, that seems like a logical assessment, although i personally wouldn't need to have this implemented, as for now i haven't had a use case where i had to use anything other than string or number as an index of a map object, not only on my current project but any other project.