[TS] Feature Request: Make optional field getters return `undefined` (instead of `null`) if the value is not set
Flatbuffers version:master OS: Mac OS BigSur
If I wanted to create a flatbuffers table that represents the following TS type:
type Foo = {
name?: string;
}
which is the same as:
type Foo = {
name: string | undefined;
}
..., I would define the following table, which represents a type with an optional field name of type string.
table Foo {
name:string;
}
When generating the TS code of Foo table, the obtained code is as follows:
export class Foo {
..
..
..
name():string|null
name(optionalEncoding:flatbuffers.Encoding):string|Uint8Array|null
name(optionalEncoding?:any):string|Uint8Array|null {
const offset = this.bb!.__offset(this.bb_pos, 4);
return offset ? this.bb!.__string(this.bb_pos + offset, optionalEncoding) : null;
}
The return type of name() method is string|null, whereas string|undefined would perfectly match the optional fields defined in TS as exposed above.
I'm finding myself manually converting types due to this. It would be great to have a flatc option to indicate that optional field getters should return undefined instead of null if a value is not set.
Is there any reason for not having this? Would you be willing to accept a contribution for this feature request?
At the same time, if a table field is required I would expect it NOT to return null nor undefined, at least when generating the object API, in the unpack() method, but the field type in question.
Hi, developers. Any update or thoughts about this? IMHO it makes lot of sense.
This issue is stale because it has been open 6 months with no activity. Please comment or label not-stale, or this will be closed in 14 days.
Just keeping this alive.
Hi, not a TS person, but are you envisioning a flag that changes every accessor or adding a key to the schema? The global flag seems too coarse grained for sufficiently large projects. I think its plausible that depending on the type null may be preferred to undefined and vice versa.
Adding field or table level options seems like more work but ultimately a better solution, e.g.
table Foo {
// field level option?
foo: string (ts_getter_null_to_undefined);
}
// and also a table level option to save typing?
table Bar (ts_getter_null_to_undefined) {
}
I would say this should come as a flatc option, being a language specific matter.
If you use 'undefined' rather than 'null' in your project you would need to add such flag everywhere in the schema otherwise. Usually you use one of them and not mix them.
This issue is stale because it has been open 6 months with no activity. Please comment or label not-stale, or this will be closed in 14 days.
Ping