TS2611: 'foo' is defined as a property in class 'A', but is overridden here in 'B' as an accessor

The error message is correct as there is a subtle bug here. When you define a property in a parent class, the property is created automatically for every one of its sub-classes.

So, in the code you wrote, had you not written for class B: set/get foo(name) { ... } the class would have had the foo property anyway since the property is declared in B's parent class - A.

In your code you're actually clobbering the foo property declared in A with the accessor declarations.

If you want to require all sub-classes of A to declare their own foo property (similar to an interface), then try:

export class A {
  abstract foo: string;

If you're really sure that your implementation is correct then you can disable the check by putting // @ts-nocheck line at the top of the ts file. @ts-nocheck in TypeScript Files