-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
mergeObjects has broken type definition #81
Comments
Hey @jam-fran , thanks for reporting it. I'm gonna take a look at it later this week. |
Hey @jam-fran , I investigated a little bit and realized the source of this bug is the Remix team has faced that recently and they also had to rollback, check out the discussion if you want to learn more about it. Thanks again for reporting it and I'll soon send the PR rolling it back. |
Hey @jam-fran , it looks like the change will be a lil harder than I thought, could you provide me with an example that breaks the type so I can add a proper regression test for that? |
Hi @gustavoguichard -- thanks for looking into this. Here's a minimal reproduction:
Here, typescript mistakenly thinks the result type of funcC is:
Hope this helps -- let me know if you need anything else. |
Hi @jam-fran , thanks for clarifying! It helped a lot! I strongly believe I fixed the bug in [email protected] , reopen the issue and LMK if that's not the case though ;) The file with that problem used to be this one: https://www.unpkg.com/[email protected]/types/utils.d.ts You can also see a reproduction of your code above in the TS playground. It seems to be working now 🚀 |
Looks great, thanks so much for your responsiveness here @gustavoguichard |
It appears that something's broken with
mergeObjects
' type definition in the generatedutils.d.ts
file. I've pasted portion of it below (only included a tiny sample, in the actual file it's thousands and thousands of lines long). In my IDE importing the function crashes the Typescript server and breaks all inferred types.declare function mergeObjects<T extends unknown[] = unknown[]>(objs: T): (T extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_11 ? { [K_10 in keyof T_11]: (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first)[K_10]; } : never : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_10 ? { [K_9 in keyof T_10]: (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_11 ? { [K_10 in keyof T_11]: (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first)[K_10]; } : never : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first)[K_9]; } : never : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_9 ? { [K_8 in keyof T_9]: (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_11 ? { [K_10 in keyof T_11]: (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first)[K_10]; } : never : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_10 ? { [K_9 in keyof T_10]: (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_11 ? { [K_10 in keyof T_11]: (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first)[K_10]; } : never : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first)[K_9]; } : never : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first)[K_8]; } : never : Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_8 ? { [K_7 in keyof T_8]: (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_11 ? { [K_10 in keyof T_11]: (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first)[K_10]; } : never : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_10 ? { [K_9 in keyof T_10]: (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_11 ? { [K_10 in keyof T_11]: (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first)[K_10]; } : never : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first)[K_9]; } : never : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_9 ? { [K_8 in keyof T_9]: (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_11 ? { [K_10 in keyof T_11]: (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first)[K_10]; } : never : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_10 ? { [K_9 in keyof T_10]: (rest extends [infer first, ...infer rest] ? (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first) extends infer T_11 ? { [K_10 in keyof T_11]: (rest extends [infer first, ...infer rest] ? any : Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<Omit<{}, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first, keyof first> & first)
The text was updated successfully, but these errors were encountered: