=== tests/cases/compiler/interfaceWithMultipleDeclarations.ts ===
interface I1<V> {
>I1 : Symbol(I1, Decl(interfaceWithMultipleDeclarations.ts, 0, 0), Decl(interfaceWithMultipleDeclarations.ts, 1, 1), Decl(interfaceWithMultipleDeclarations.ts, 3, 1), Decl(interfaceWithMultipleDeclarations.ts, 5, 1), Decl(interfaceWithMultipleDeclarations.ts, 7, 1) ... and 1 more)
>V : Symbol(V, Decl(interfaceWithMultipleDeclarations.ts, 0, 13), Decl(interfaceWithMultipleDeclarations.ts, 6, 13), Decl(interfaceWithMultipleDeclarations.ts, 8, 13))
}
interface I1<S> { // Name mismatch
>I1 : Symbol(I1, Decl(interfaceWithMultipleDeclarations.ts, 0, 0), Decl(interfaceWithMultipleDeclarations.ts, 1, 1), Decl(interfaceWithMultipleDeclarations.ts, 3, 1), Decl(interfaceWithMultipleDeclarations.ts, 5, 1), Decl(interfaceWithMultipleDeclarations.ts, 7, 1) ... and 1 more)
>S : Symbol(S, Decl(interfaceWithMultipleDeclarations.ts, 2, 13))
}
interface I1<T, U extends T> { // Length mismatch
>I1 : Symbol(I1, Decl(interfaceWithMultipleDeclarations.ts, 0, 0), Decl(interfaceWithMultipleDeclarations.ts, 1, 1), Decl(interfaceWithMultipleDeclarations.ts, 3, 1), Decl(interfaceWithMultipleDeclarations.ts, 5, 1), Decl(interfaceWithMultipleDeclarations.ts, 7, 1) ... and 1 more)
>T : Symbol(T, Decl(interfaceWithMultipleDeclarations.ts, 4, 13))
>U : Symbol(U, Decl(interfaceWithMultipleDeclarations.ts, 4, 15))
>T : Symbol(T, Decl(interfaceWithMultipleDeclarations.ts, 4, 13))
}
interface I1<V extends string> { // constraint present
>I1 : Symbol(I1, Decl(interfaceWithMultipleDeclarations.ts, 0, 0), Decl(interfaceWithMultipleDeclarations.ts, 1, 1), Decl(interfaceWithMultipleDeclarations.ts, 3, 1), Decl(interfaceWithMultipleDeclarations.ts, 5, 1), Decl(interfaceWithMultipleDeclarations.ts, 7, 1) ... and 1 more)
>V : Symbol(V, Decl(interfaceWithMultipleDeclarations.ts, 0, 13), Decl(interfaceWithMultipleDeclarations.ts, 6, 13), Decl(interfaceWithMultipleDeclarations.ts, 8, 13))
}
interface I1<V, X extends V> { // Length mismatch
>I1 : Symbol(I1, Decl(interfaceWithMultipleDeclarations.ts, 0, 0), Decl(interfaceWithMultipleDeclarations.ts, 1, 1), Decl(interfaceWithMultipleDeclarations.ts, 3, 1), Decl(interfaceWithMultipleDeclarations.ts, 5, 1), Decl(interfaceWithMultipleDeclarations.ts, 7, 1) ... and 1 more)
>V : Symbol(V, Decl(interfaceWithMultipleDeclarations.ts, 0, 13), Decl(interfaceWithMultipleDeclarations.ts, 6, 13), Decl(interfaceWithMultipleDeclarations.ts, 8, 13))
>X : Symbol(X, Decl(interfaceWithMultipleDeclarations.ts, 8, 15))
>V : Symbol(V, Decl(interfaceWithMultipleDeclarations.ts, 0, 13), Decl(interfaceWithMultipleDeclarations.ts, 6, 13), Decl(interfaceWithMultipleDeclarations.ts, 8, 13))
}
interface I1 { // Length mismatch
>I1 : Symbol(I1, Decl(interfaceWithMultipleDeclarations.ts, 0, 0), Decl(interfaceWithMultipleDeclarations.ts, 1, 1), Decl(interfaceWithMultipleDeclarations.ts, 3, 1), Decl(interfaceWithMultipleDeclarations.ts, 5, 1), Decl(interfaceWithMultipleDeclarations.ts, 7, 1) ... and 1 more)
}

interface I2<T extends string> {
>I2 : Symbol(I2, Decl(interfaceWithMultipleDeclarations.ts, 11, 1), Decl(interfaceWithMultipleDeclarations.ts, 14, 1), Decl(interfaceWithMultipleDeclarations.ts, 16, 1), Decl(interfaceWithMultipleDeclarations.ts, 18, 1), Decl(interfaceWithMultipleDeclarations.ts, 20, 1) ... and 1 more)
>T : Symbol(T, Decl(interfaceWithMultipleDeclarations.ts, 13, 13), Decl(interfaceWithMultipleDeclarations.ts, 15, 13), Decl(interfaceWithMultipleDeclarations.ts, 17, 13))
}
interface I2<T extends () => string> { // constraint mismatch
>I2 : Symbol(I2, Decl(interfaceWithMultipleDeclarations.ts, 11, 1), Decl(interfaceWithMultipleDeclarations.ts, 14, 1), Decl(interfaceWithMultipleDeclarations.ts, 16, 1), Decl(interfaceWithMultipleDeclarations.ts, 18, 1), Decl(interfaceWithMultipleDeclarations.ts, 20, 1) ... and 1 more)
>T : Symbol(T, Decl(interfaceWithMultipleDeclarations.ts, 13, 13), Decl(interfaceWithMultipleDeclarations.ts, 15, 13), Decl(interfaceWithMultipleDeclarations.ts, 17, 13))
}
interface I2<T> { // constraint absent
>I2 : Symbol(I2, Decl(interfaceWithMultipleDeclarations.ts, 11, 1), Decl(interfaceWithMultipleDeclarations.ts, 14, 1), Decl(interfaceWithMultipleDeclarations.ts, 16, 1), Decl(interfaceWithMultipleDeclarations.ts, 18, 1), Decl(interfaceWithMultipleDeclarations.ts, 20, 1) ... and 1 more)
>T : Symbol(T, Decl(interfaceWithMultipleDeclarations.ts, 13, 13), Decl(interfaceWithMultipleDeclarations.ts, 15, 13), Decl(interfaceWithMultipleDeclarations.ts, 17, 13))
}
interface I2<U> { // name mismatch
>I2 : Symbol(I2, Decl(interfaceWithMultipleDeclarations.ts, 11, 1), Decl(interfaceWithMultipleDeclarations.ts, 14, 1), Decl(interfaceWithMultipleDeclarations.ts, 16, 1), Decl(interfaceWithMultipleDeclarations.ts, 18, 1), Decl(interfaceWithMultipleDeclarations.ts, 20, 1) ... and 1 more)
>U : Symbol(U, Decl(interfaceWithMultipleDeclarations.ts, 19, 13))
}
interface I2<X, Y> { // length mismatch
>I2 : Symbol(I2, Decl(interfaceWithMultipleDeclarations.ts, 11, 1), Decl(interfaceWithMultipleDeclarations.ts, 14, 1), Decl(interfaceWithMultipleDeclarations.ts, 16, 1), Decl(interfaceWithMultipleDeclarations.ts, 18, 1), Decl(interfaceWithMultipleDeclarations.ts, 20, 1) ... and 1 more)
>X : Symbol(X, Decl(interfaceWithMultipleDeclarations.ts, 21, 13))
>Y : Symbol(Y, Decl(interfaceWithMultipleDeclarations.ts, 21, 15))
}
interface I2 { // length mismatch
>I2 : Symbol(I2, Decl(interfaceWithMultipleDeclarations.ts, 11, 1), Decl(interfaceWithMultipleDeclarations.ts, 14, 1), Decl(interfaceWithMultipleDeclarations.ts, 16, 1), Decl(interfaceWithMultipleDeclarations.ts, 18, 1), Decl(interfaceWithMultipleDeclarations.ts, 20, 1) ... and 1 more)
}

interface I3 {
>I3 : Symbol(I3, Decl(interfaceWithMultipleDeclarations.ts, 24, 1), Decl(interfaceWithMultipleDeclarations.ts, 27, 1))
}
interface I3<T> { // length mismatch
>I3 : Symbol(I3, Decl(interfaceWithMultipleDeclarations.ts, 24, 1), Decl(interfaceWithMultipleDeclarations.ts, 27, 1))
>T : Symbol(T, Decl(interfaceWithMultipleDeclarations.ts, 28, 13))
}

class Foo<T> {
>Foo : Symbol(Foo, Decl(interfaceWithMultipleDeclarations.ts, 29, 1))
>T : Symbol(T, Decl(interfaceWithMultipleDeclarations.ts, 31, 10))
}
interface I4<T extends Foo<T>> {
>I4 : Symbol(I4, Decl(interfaceWithMultipleDeclarations.ts, 32, 1), Decl(interfaceWithMultipleDeclarations.ts, 34, 1))
>T : Symbol(T, Decl(interfaceWithMultipleDeclarations.ts, 33, 13), Decl(interfaceWithMultipleDeclarations.ts, 35, 13))
>Foo : Symbol(Foo, Decl(interfaceWithMultipleDeclarations.ts, 29, 1))
>T : Symbol(T, Decl(interfaceWithMultipleDeclarations.ts, 33, 13), Decl(interfaceWithMultipleDeclarations.ts, 35, 13))
}
interface I4<T extends Foo<T>> { // Should not be error
>I4 : Symbol(I4, Decl(interfaceWithMultipleDeclarations.ts, 32, 1), Decl(interfaceWithMultipleDeclarations.ts, 34, 1))
>T : Symbol(T, Decl(interfaceWithMultipleDeclarations.ts, 33, 13), Decl(interfaceWithMultipleDeclarations.ts, 35, 13))
>Foo : Symbol(Foo, Decl(interfaceWithMultipleDeclarations.ts, 29, 1))
>T : Symbol(T, Decl(interfaceWithMultipleDeclarations.ts, 33, 13), Decl(interfaceWithMultipleDeclarations.ts, 35, 13))
}
