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

Compilation error for nested repeated fields with useOptionals=all #1112

Closed
vecerek opened this issue Sep 29, 2024 · 1 comment · Fixed by #1113
Closed

Compilation error for nested repeated fields with useOptionals=all #1112

vecerek opened this issue Sep 29, 2024 · 1 comment · Fixed by #1113
Labels

Comments

@vecerek
Copy link
Contributor

vecerek commented Sep 29, 2024

The TS code generated for the following protobuf code with the useOptionals=all parameter does not compile.

syntax = "proto3";

import "google/protobuf/wrappers.proto";

message NestedList { repeated google.protobuf.StringValue a_string = 1; }

message Example { NestedList list = 1; }

The problem lies in the decode function not taking into account that the value after decoding could also be undefined. Therefore the following generated line:

message.aString!.push(StringValue.decode(reader, reader.uint32()).value);

results in the following TS compilation error:

Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
  Type 'undefined' is not assignable to type 'string'.ts(2345)
vecerek added a commit to vecerek/ts-proto that referenced this issue Sep 29, 2024
…ll (stephenh#1112)

The TS code generated for the following protobuf code with the `useOptionals=all` parameter does not compile.

```proto
syntax = "proto3";

import "google/protobuf/wrappers.proto";

message NestedList { repeated google.protobuf.StringValue a_string = 1; }

message Example { NestedList list = 1; }
```

The problem lies in the `decode` function not taking into account that the `value` after decoding could also be `undefined`. Therefore the following generated line:

```ts
message.aString!.push(StringValue.decode(reader, reader.uint32()).value);
```

results in the following TS compilation error:

```
Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
  Type 'undefined' is not assignable to type 'string'.ts(2345)
```

The fix is to push the decoded element to the array only if it's a truthy value.
vecerek added a commit to vecerek/ts-proto that referenced this issue Sep 29, 2024
…ll (stephenh#1112)

The TS code generated for the following protobuf code with the `useOptionals=all` parameter does not compile.

```proto
syntax = "proto3";

import "google/protobuf/wrappers.proto";

message NestedList { repeated google.protobuf.StringValue a_string = 1; }

message Example { NestedList list = 1; }
```

The problem lies in the `decode` function not taking into account that the `value` after decoding could also be `undefined`. Therefore the following generated line:

```ts
message.aString!.push(StringValue.decode(reader, reader.uint32()).value);
```

results in the following TS compilation error:

```
Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
  Type 'undefined' is not assignable to type 'string'.ts(2345)
```

The fix is to push the decoded element to the array only if it's not an `undefined` value.
stephenh pushed a commit that referenced this issue Sep 29, 2024
…all` (#1113)

Fixes #1112.

The fix is to push the decoded element to the array only if it's not an
`undefined` value.
stephenh pushed a commit that referenced this issue Sep 29, 2024
## [2.2.1](v2.2.0...v2.2.1) (2024-09-29)

### Bug Fixes

* Compilation error for nested repeated fields with `useOptionals=all` ([#1113](#1113)) ([e89fc51](e89fc51)), closes [#1112](#1112)
@stephenh
Copy link
Owner

🎉 This issue has been resolved in version 2.2.1 🎉

The release is available on:

Your semantic-release bot 📦🚀

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

Successfully merging a pull request may close this issue.

2 participants