=== tests/cases/compiler/baseClassImprovedMismatchErrors.ts ===
class Base {
>Base : Symbol(Base, Decl(baseClassImprovedMismatchErrors.ts, 0, 0))

    n: Base | string;
>n : Symbol(Base.n, Decl(baseClassImprovedMismatchErrors.ts, 0, 12))
>Base : Symbol(Base, Decl(baseClassImprovedMismatchErrors.ts, 0, 0))

    fn() {
>fn : Symbol(Base.fn, Decl(baseClassImprovedMismatchErrors.ts, 1, 21))

        return 10;
    }
}
class Derived extends Base {
>Derived : Symbol(Derived, Decl(baseClassImprovedMismatchErrors.ts, 5, 1))
>Base : Symbol(Base, Decl(baseClassImprovedMismatchErrors.ts, 0, 0))

    n: Derived | string;
>n : Symbol(Derived.n, Decl(baseClassImprovedMismatchErrors.ts, 6, 28))
>Derived : Symbol(Derived, Decl(baseClassImprovedMismatchErrors.ts, 5, 1))

    fn() {
>fn : Symbol(Derived.fn, Decl(baseClassImprovedMismatchErrors.ts, 7, 24))

        return 10 as number | string;
    }
}
class DerivedInterface implements Base {
>DerivedInterface : Symbol(DerivedInterface, Decl(baseClassImprovedMismatchErrors.ts, 11, 1))
>Base : Symbol(Base, Decl(baseClassImprovedMismatchErrors.ts, 0, 0))

    n: DerivedInterface | string;
>n : Symbol(DerivedInterface.n, Decl(baseClassImprovedMismatchErrors.ts, 12, 40))
>DerivedInterface : Symbol(DerivedInterface, Decl(baseClassImprovedMismatchErrors.ts, 11, 1))

    fn() {
>fn : Symbol(DerivedInterface.fn, Decl(baseClassImprovedMismatchErrors.ts, 13, 33))

        return 10 as number | string;
    }
}
