=== tests/cases/compiler/overloadOnGenericClassAndNonGenericClass.ts === class A { a; } >A : A, Symbol(A, Decl(overloadOnGenericClassAndNonGenericClass.ts, 0, 0)) >a : any, Symbol(a, Decl(overloadOnGenericClassAndNonGenericClass.ts, 0, 9)) class B { b; } >B : B, Symbol(B, Decl(overloadOnGenericClassAndNonGenericClass.ts, 0, 14)) >b : any, Symbol(b, Decl(overloadOnGenericClassAndNonGenericClass.ts, 1, 9)) class C { c; } >C : C, Symbol(C, Decl(overloadOnGenericClassAndNonGenericClass.ts, 1, 14)) >c : any, Symbol(c, Decl(overloadOnGenericClassAndNonGenericClass.ts, 2, 9)) class X { x: T; } >X : X, Symbol(X, Decl(overloadOnGenericClassAndNonGenericClass.ts, 2, 14)) >T : T, Symbol(T, Decl(overloadOnGenericClassAndNonGenericClass.ts, 3, 8)) >x : T, Symbol(x, Decl(overloadOnGenericClassAndNonGenericClass.ts, 3, 12)) >T : T, Symbol(T, Decl(overloadOnGenericClassAndNonGenericClass.ts, 3, 8)) class X1 { x: string; } >X1 : X1, Symbol(X1, Decl(overloadOnGenericClassAndNonGenericClass.ts, 3, 20)) >x : string, Symbol(x, Decl(overloadOnGenericClassAndNonGenericClass.ts, 4, 10)) class X2 { x: string; } >X2 : X2, Symbol(X2, Decl(overloadOnGenericClassAndNonGenericClass.ts, 4, 23)) >x : string, Symbol(x, Decl(overloadOnGenericClassAndNonGenericClass.ts, 5, 10)) function f(a: X1): A; >f : { (a: X1): A; (a: X): B; }, Symbol(f, Decl(overloadOnGenericClassAndNonGenericClass.ts, 5, 23), Decl(overloadOnGenericClassAndNonGenericClass.ts, 6, 21), Decl(overloadOnGenericClassAndNonGenericClass.ts, 7, 26)) >a : X1, Symbol(a, Decl(overloadOnGenericClassAndNonGenericClass.ts, 6, 11)) >X1 : X1, Symbol(X1, Decl(overloadOnGenericClassAndNonGenericClass.ts, 3, 20)) >A : A, Symbol(A, Decl(overloadOnGenericClassAndNonGenericClass.ts, 0, 0)) function f(a: X): B; >f : { (a: X1): A; (a: X): B; }, Symbol(f, Decl(overloadOnGenericClassAndNonGenericClass.ts, 5, 23), Decl(overloadOnGenericClassAndNonGenericClass.ts, 6, 21), Decl(overloadOnGenericClassAndNonGenericClass.ts, 7, 26)) >T : T, Symbol(T, Decl(overloadOnGenericClassAndNonGenericClass.ts, 7, 11)) >a : X, Symbol(a, Decl(overloadOnGenericClassAndNonGenericClass.ts, 7, 14)) >X : X, Symbol(X, Decl(overloadOnGenericClassAndNonGenericClass.ts, 2, 14)) >T : T, Symbol(T, Decl(overloadOnGenericClassAndNonGenericClass.ts, 7, 11)) >B : B, Symbol(B, Decl(overloadOnGenericClassAndNonGenericClass.ts, 0, 14)) function f(a): any { >f : { (a: X1): A; (a: X): B; }, Symbol(f, Decl(overloadOnGenericClassAndNonGenericClass.ts, 5, 23), Decl(overloadOnGenericClassAndNonGenericClass.ts, 6, 21), Decl(overloadOnGenericClassAndNonGenericClass.ts, 7, 26)) >a : any, Symbol(a, Decl(overloadOnGenericClassAndNonGenericClass.ts, 8, 11)) } var xs: X; >xs : X, Symbol(xs, Decl(overloadOnGenericClassAndNonGenericClass.ts, 11, 3)) >X : X, Symbol(X, Decl(overloadOnGenericClassAndNonGenericClass.ts, 2, 14)) var t3 = f(xs); >t3 : A, Symbol(t3, Decl(overloadOnGenericClassAndNonGenericClass.ts, 13, 3), Decl(overloadOnGenericClassAndNonGenericClass.ts, 14, 3)) >f(xs) : A >f : { (a: X1): A; (a: X): B; }, Symbol(f, Decl(overloadOnGenericClassAndNonGenericClass.ts, 5, 23), Decl(overloadOnGenericClassAndNonGenericClass.ts, 6, 21), Decl(overloadOnGenericClassAndNonGenericClass.ts, 7, 26)) >xs : X, Symbol(xs, Decl(overloadOnGenericClassAndNonGenericClass.ts, 11, 3)) var t3: A; // should not error >t3 : A, Symbol(t3, Decl(overloadOnGenericClassAndNonGenericClass.ts, 13, 3), Decl(overloadOnGenericClassAndNonGenericClass.ts, 14, 3)) >A : A, Symbol(A, Decl(overloadOnGenericClassAndNonGenericClass.ts, 0, 0))