@@ -138,3 +138,53 @@ declare function function1<T extends {[K in keyof T]: Cond<T[K]>}>(): T[keyof T]
138138>T : Symbol(T, Decl(infiniteConstraints.ts, 35, 27))
139139>T : Symbol(T, Decl(infiniteConstraints.ts, 35, 27))
140140
141+ // Repro from #31823
142+
143+ export type Prepend<Elm, T extends unknown[]> =
144+ >Prepend : Symbol(Prepend, Decl(infiniteConstraints.ts, 35, 88))
145+ >Elm : Symbol(Elm, Decl(infiniteConstraints.ts, 39, 20))
146+ >T : Symbol(T, Decl(infiniteConstraints.ts, 39, 24))
147+
148+ T extends unknown ?
149+ >T : Symbol(T, Decl(infiniteConstraints.ts, 39, 24))
150+
151+ ((arg: Elm, ...rest: T) => void) extends ((...args: infer T2) => void) ? T2 :
152+ >arg : Symbol(arg, Decl(infiniteConstraints.ts, 41, 4))
153+ >Elm : Symbol(Elm, Decl(infiniteConstraints.ts, 39, 20))
154+ >rest : Symbol(rest, Decl(infiniteConstraints.ts, 41, 13))
155+ >T : Symbol(T, Decl(infiniteConstraints.ts, 39, 24))
156+ >args : Symbol(args, Decl(infiniteConstraints.ts, 41, 45))
157+ >T2 : Symbol(T2, Decl(infiniteConstraints.ts, 41, 59))
158+ >T2 : Symbol(T2, Decl(infiniteConstraints.ts, 41, 59))
159+
160+ never :
161+ never;
162+ export type ExactExtract<T, U> = T extends U ? U extends T ? T : never : never;
163+ >ExactExtract : Symbol(ExactExtract, Decl(infiniteConstraints.ts, 43, 8))
164+ >T : Symbol(T, Decl(infiniteConstraints.ts, 44, 25))
165+ >U : Symbol(U, Decl(infiniteConstraints.ts, 44, 27))
166+ >T : Symbol(T, Decl(infiniteConstraints.ts, 44, 25))
167+ >U : Symbol(U, Decl(infiniteConstraints.ts, 44, 27))
168+ >U : Symbol(U, Decl(infiniteConstraints.ts, 44, 27))
169+ >T : Symbol(T, Decl(infiniteConstraints.ts, 44, 25))
170+ >T : Symbol(T, Decl(infiniteConstraints.ts, 44, 25))
171+
172+ type Conv<T, U = T> =
173+ >Conv : Symbol(Conv, Decl(infiniteConstraints.ts, 44, 79))
174+ >T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10))
175+ >U : Symbol(U, Decl(infiniteConstraints.ts, 46, 12))
176+ >T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10))
177+
178+ { 0: [T]; 1: Prepend<T, Conv<ExactExtract<U, T>>>;}[U extends T ? 0 : 1];
179+ >0 : Symbol(0, Decl(infiniteConstraints.ts, 47, 3))
180+ >T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10))
181+ >1 : Symbol(1, Decl(infiniteConstraints.ts, 47, 11))
182+ >Prepend : Symbol(Prepend, Decl(infiniteConstraints.ts, 35, 88))
183+ >T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10))
184+ >Conv : Symbol(Conv, Decl(infiniteConstraints.ts, 44, 79))
185+ >ExactExtract : Symbol(ExactExtract, Decl(infiniteConstraints.ts, 43, 8))
186+ >U : Symbol(U, Decl(infiniteConstraints.ts, 46, 12))
187+ >T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10))
188+ >U : Symbol(U, Decl(infiniteConstraints.ts, 46, 12))
189+ >T : Symbol(T, Decl(infiniteConstraints.ts, 46, 10))
190+
0 commit comments