Skip to content

Conversation

@aws-cdk-automation
Copy link
Collaborator

Backport

This will backport the following commits from main to maintenance/v5.8:

Questions ?

Please refer to the Backport tool documentation

Relaxes the the restriction on covariant overrides as currently
documented here:

https://aws.github.io/jsii/user-guides/lib-author/typescript-restrictions/#covariant-overrides-parameter-list-changes

Use of this new feature is indicated by the `class-covariant-overrides`
feature in the produced jsii assembly.

## What is the change?

It is now allowed to override the _type of readonly class properties_
and the _return type of class methods_ in class inheritance, as long as
the changes are covariant to the superclass. Importantly, we still don't
allow covariant overrides when implementing interfaces.

✅ now possible

```ts
export class Superclass {}
export class Subclass extends Superclass {}

export class SomethingUnspecific {
  public readonly something = new Superclass();
  public returnSomething(): Superclass {
    return new Superclass();
  }
}

// Subclass is covariant to Superclass
export class SomethingSpecific extends SomethingUnspecific {
  public readonly something = new Subclass();
  public returnSomething(): Subclass {
    return new Subclass();
  }
}
```

❌ still prohibited

```ts
export class Superclass {}
export class Subclass extends Superclass {}

export interface ISomething {
  something: Superclass;
  returnSomething(): Superclass;
}

// ❌ covariant changes are still prohibited when implementing an interface
export class SomethingImpl implements ISomething {
  public something: Subclass = new Subclass();
  public returnSomething(): Subclass {
    return new Subclass();
  }
}
```

## Why is this safe now?

We can make these changes now, because C# 9 has added the necessary
support, and this version of C# has been introduced in .NET 5.
In jsii we have now made the necessary change to [increase the target
framework to `net6.0`](aws/jsii#4916).

C# references:

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/covariant-returns

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/override

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/knowing-when-to-use-override-and-new-keywords

---

By submitting this pull request, I confirm that my contribution is made
under the terms of the [Apache 2.0 license].

[Apache 2.0 license]: https://www.apache.org/licenses/LICENSE-2.0

(cherry picked from commit 0e9cf43)
@aws-cdk-automation aws-cdk-automation added this pull request to the merge queue Oct 29, 2025
Merged via the queue into maintenance/v5.8 with commit 1593ae0 Oct 29, 2025
84 checks passed
@aws-cdk-automation aws-cdk-automation deleted the backport/maintenance/v5.8-pr-2324 branch October 29, 2025 09:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

auto-approve Automatically approve this PR backport

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants