=== tests/cases/conformance/types/typeRelationships/recursiveTypes/nominalSubtypeCheckOfTypeParameter.ts === interface Tuple { >Tuple : Tuple, Symbol(Tuple, Decl(nominalSubtypeCheckOfTypeParameter.ts, 0, 0)) >T : T, Symbol(T, Decl(nominalSubtypeCheckOfTypeParameter.ts, 0, 16)) >S : S, Symbol(S, Decl(nominalSubtypeCheckOfTypeParameter.ts, 0, 18)) first: T >first : T, Symbol(first, Decl(nominalSubtypeCheckOfTypeParameter.ts, 0, 23)) >T : T, Symbol(T, Decl(nominalSubtypeCheckOfTypeParameter.ts, 0, 16)) second: S >second : S, Symbol(second, Decl(nominalSubtypeCheckOfTypeParameter.ts, 1, 12)) >S : S, Symbol(S, Decl(nominalSubtypeCheckOfTypeParameter.ts, 0, 18)) } interface Sequence { >Sequence : Sequence, Symbol(Sequence, Decl(nominalSubtypeCheckOfTypeParameter.ts, 3, 1)) >T : T, Symbol(T, Decl(nominalSubtypeCheckOfTypeParameter.ts, 5, 19)) hasNext(): boolean >hasNext : () => boolean, Symbol(hasNext, Decl(nominalSubtypeCheckOfTypeParameter.ts, 5, 23)) pop(): T >pop : () => T, Symbol(pop, Decl(nominalSubtypeCheckOfTypeParameter.ts, 6, 22)) >T : T, Symbol(T, Decl(nominalSubtypeCheckOfTypeParameter.ts, 5, 19)) zip(seq: Sequence): Sequence> >zip : (seq: Sequence) => Sequence>, Symbol(zip, Decl(nominalSubtypeCheckOfTypeParameter.ts, 7, 14)) >S : S, Symbol(S, Decl(nominalSubtypeCheckOfTypeParameter.ts, 8, 10)) >seq : Sequence, Symbol(seq, Decl(nominalSubtypeCheckOfTypeParameter.ts, 8, 13)) >Sequence : Sequence, Symbol(Sequence, Decl(nominalSubtypeCheckOfTypeParameter.ts, 3, 1)) >S : S, Symbol(S, Decl(nominalSubtypeCheckOfTypeParameter.ts, 8, 10)) >Sequence : Sequence, Symbol(Sequence, Decl(nominalSubtypeCheckOfTypeParameter.ts, 3, 1)) >Tuple : Tuple, Symbol(Tuple, Decl(nominalSubtypeCheckOfTypeParameter.ts, 0, 0)) >T : T, Symbol(T, Decl(nominalSubtypeCheckOfTypeParameter.ts, 5, 19)) >S : S, Symbol(S, Decl(nominalSubtypeCheckOfTypeParameter.ts, 8, 10)) } // error, despite the fact that the code explicitly says List extends Sequence, the current rules for infinitely expanding type references // perform nominal subtyping checks that allow variance for type arguments, but not nominal subtyping for the generic type itself interface List extends Sequence { >List : List, Symbol(List, Decl(nominalSubtypeCheckOfTypeParameter.ts, 9, 1)) >T : T, Symbol(T, Decl(nominalSubtypeCheckOfTypeParameter.ts, 13, 15)) >Sequence : Sequence, Symbol(Sequence, Decl(nominalSubtypeCheckOfTypeParameter.ts, 3, 1)) >T : T, Symbol(T, Decl(nominalSubtypeCheckOfTypeParameter.ts, 13, 15)) getLength(): number >getLength : () => number, Symbol(getLength, Decl(nominalSubtypeCheckOfTypeParameter.ts, 13, 39)) zip(seq: Sequence): List> >zip : (seq: Sequence) => List>, Symbol(zip, Decl(nominalSubtypeCheckOfTypeParameter.ts, 14, 23)) >S : S, Symbol(S, Decl(nominalSubtypeCheckOfTypeParameter.ts, 15, 10)) >seq : Sequence, Symbol(seq, Decl(nominalSubtypeCheckOfTypeParameter.ts, 15, 13)) >Sequence : Sequence, Symbol(Sequence, Decl(nominalSubtypeCheckOfTypeParameter.ts, 3, 1)) >S : S, Symbol(S, Decl(nominalSubtypeCheckOfTypeParameter.ts, 15, 10)) >List : List, Symbol(List, Decl(nominalSubtypeCheckOfTypeParameter.ts, 9, 1)) >Tuple : Tuple, Symbol(Tuple, Decl(nominalSubtypeCheckOfTypeParameter.ts, 0, 0)) >T : T, Symbol(T, Decl(nominalSubtypeCheckOfTypeParameter.ts, 13, 15)) >S : S, Symbol(S, Decl(nominalSubtypeCheckOfTypeParameter.ts, 15, 10)) }