// @strict: true // Both of the following types trigger the recursion limiter in getImmediateBaseConstraint type T1], { val: string }>["val"] }> = B; type T2]["val"] }> = B; // Repros from #22950 type AProp = T declare function myBug< T extends { [K in keyof T]: T[K] extends AProp ? U : never } >(arg: T): T const out = myBug({obj1: {a: "test"}}) type Value = Record<"val", V>; declare function value(val: V): Value; declare function ensureNoDuplicates< T extends { [K in keyof T]: Extract["val"] extends Extract], Value>["val"] ? never : any } >(vals: T): void; const noError = ensureNoDuplicates({main: value("test"), alternate: value("test2")}); const shouldBeNoError = ensureNoDuplicates({main: value("test")}); const shouldBeError = ensureNoDuplicates({main: value("dup"), alternate: value("dup")}); // Repro from #26448 type Cond = T extends number ? number : never; declare function function1}>(): T[keyof T]["foo"]; // Repro from #31823 export type Prepend = T extends unknown ? ((arg: Elm, ...rest: T) => void) extends ((...args: infer T2) => void) ? T2 : never : never; export type ExactExtract = T extends U ? U extends T ? T : never : never; type Conv = { 0: [T]; 1: Prepend>>;}[U extends T ? 0 : 1];