1 2type AMappedType<T> = { [KeyType in keyof T]: number }; 3 4type HasM = { 5 m: number; 6}; 7 8// Simplified repro from #48059 9 10interface X1< 11 T extends HasM, 12 Output = AMappedType<{ s: number; } & { [k in keyof T]: number; }> 13> { 14 tee: T; 15 output: Output; 16} 17 18type F1<T> = T extends X1<infer U> ? U : never; 19 20// With default inlined 21 22interface X2< 23 T extends HasM, 24 Output 25> { 26 tee: T; 27 output: Output; 28} 29 30type F2<T> = T extends X2<infer U, AMappedType<{ s: number; } & { [k in keyof (infer U)]: number; }>> ? U : never; 31 32// Original repro 33 34type Simplify<T> = {[KeyType in keyof T]: T[KeyType]}; 35 36type optionalKeys<T extends object> = { 37 [k in keyof T]: undefined extends T[k] ? k : never; 38}[keyof T]; 39 40type requiredKeys<T extends object> = Exclude<keyof T, optionalKeys<T>>; 41 42export type addQuestionMarks<T extends object> = { 43 [k in optionalKeys<T>]?: T[k]; 44} & { 45 [k in requiredKeys<T>]: T[k]; 46}; 47 48type ZodRawShape = { 49 [k: string]: ZodType<any>; 50}; 51 52interface ZodType<Output> { 53 _type: Output; 54} 55 56interface ZodObject< 57 T extends ZodRawShape, 58 Output = Simplify< 59 { 60 [k in optionalKeys<T>]?: T[k]; 61 } & { 62 [k in requiredKeys<T>]: T[k]; 63 } 64 > 65> extends ZodType<Output> { 66 readonly _shape: T; 67} 68 69type MyObject<T> = T extends ZodObject<infer U> 70 ? U extends ZodRawShape 71 ? U 72 : never 73 : never; 74 75// Repro from #50479 76 77type Cell<Value extends BaseValue = any, BaseValue = unknown> = { 78 id: string 79} 80 81type Items<Type extends Cell = Cell> = { 82 type: Type 83 name: string 84} 85 86type InferIOItemToJSType<T extends Items> = 87 T extends { type: infer U } 88 ? U extends Cell<infer V/**, infer _ or unknown, or any valid type **/> 89 ? V 90 : never 91 : never 92