# TSR0601: Method '…' is not compatible: parameter '…' of type '…' would receive '…'. Methods are checked like functions in sound mode.

> A method's parameter type is narrower than the method it implements or overrides. Methods are checked like functions in sound mode: widen the parameter.

## What it means

TypeScript compares method parameters bivariantly, so an override can accept less than its base promises, and a caller passing the wider type breaks it. In sound mode, when the target method is declared in a sound file, its parameters are compared contravariantly, like function-typed properties under `strictFunctionTypes`. Methods declared in lib files, `.d.ts` files and non-sound packages keep TypeScript's check.

## Example

```ts
// An override that narrows a parameter of the base method.
class Base {
  accept(v: string | number): string {
    return String(v);
  }
}
class Sub extends Base {
  override accept(v: string): string { // @expect TSR0601
    return v.toUpperCase();
  }
}
export const out: string = new Sub().accept("a");
```

## How to fix

- Widen the parameter to the base type and narrow inside the method with a check.
- Or make the interface or base class generic (`Handler<E extends AppEvent>`), so each implementation states the type it handles.

Sound mode is defined in [design record 0007](https://github.com/Webb-Ventures/typescript-rust/blob/main/docs/design/0007-sound-mode.md) (accepted 2026-10-15).

Source: https://ts-r.dev/errors/TSR0601/
