=== tests/cases/compiler/interfaceWithMultipleDeclarations.ts ===
interface I1<V> {
>I1 : I1<V, S, T, U, X>
>V : V
}
interface I1<S> { // Name mismatch
>I1 : I1<V, S, T, U, X>
>S : S
}
interface I1<T, U extends T> { // Length mismatch
>I1 : I1<V, S, T, U, X>
>T : T
>U : U
>T : T
}
interface I1<V extends string> { // constraint present
>I1 : I1<V, S, T, U, X>
>V : V
}
interface I1<V, X extends V> { // Length mismatch
>I1 : I1<V, S, T, U, X>
>V : V
>X : X
>V : V
}
interface I1 { // Length mismatch
>I1 : I1<V, S, T, U, X>
}

interface I2<T extends string> {
>I2 : I2<T, U, X, Y>
>T : T
}
interface I2<T extends () => string> { // constraint mismatch
>I2 : I2<T, U, X, Y>
>T : T
}
interface I2<T> { // constraint absent
>I2 : I2<T, U, X, Y>
>T : T
}
interface I2<U> { // name mismatch
>I2 : I2<T, U, X, Y>
>U : U
}
interface I2<X, Y> { // length mismatch
>I2 : I2<T, U, X, Y>
>X : X
>Y : Y
}
interface I2 { // length mismatch
>I2 : I2<T, U, X, Y>
}

interface I3 {
>I3 : I3<T>
}
interface I3<T> { // length mismatch
>I3 : I3<T>
>T : T
}

class Foo<T> {
>Foo : Foo<T>
>T : T
}
interface I4<T extends Foo<T>> {
>I4 : I4<T>
>T : T
>Foo : Foo<T>
>T : T
}
interface I4<T extends Foo<T>> { // Should not be error
>I4 : I4<T>
>T : T
>Foo : Foo<T>
>T : T
}
