Skip to content
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

ComboboxOptions render prop option has unknown type #3326

Closed
jussirantala opened this issue Jun 25, 2024 · 5 comments · Fixed by #3327
Closed

ComboboxOptions render prop option has unknown type #3326

jussirantala opened this issue Jun 25, 2024 · 5 comments · Fixed by #3327
Assignees

Comments

@jussirantala
Copy link

jussirantala commented Jun 25, 2024

What package within Headless UI are you using?

For example: @headlessui/react

What version of that package are you using?

For example: v2.1.0

Describe your issue

When using the render prop of ComboboxOptions for a virtualized list, the option property has unknown type.

image
@jussirantala jussirantala changed the title ComboboxOptions render prop options has unknown type ComboboxOptions render prop option has unknown type Jun 25, 2024
@thecrypticace thecrypticace self-assigned this Jun 25, 2024
@thecrypticace
Copy link
Contributor

Hey! So this is a known limitation of TypeScript in how it interprets JSX. Children in JSX/TSX can't be "typesafe" and as a result are not able to infer their types, props, etc… based on the parent component.

Matt Pocock has an article about this topic that details some of the problems. But the gist is that we'd need to find a way to design the types such that the "children" of Combobox are only of a certain type — this would then allow us to infer the props type. Sadly this is just not possible today.

This is why the type in the render prop is typed as unknown — to push people to type it themselves. I'd suggest typing it explicitly like this:

<HeadlessComboboxOptions>
  {({ option } : { option: MyOptionType }) => (
    <HeadlessComboboxOption></HeadlessComboboxOption>
  )}
</HeadlessComboboxOptions>

Hope that helps 👍

@jussirantala
Copy link
Author

jussirantala commented Jun 25, 2024

@thecrypticace I actually tried to type it myself but I get this:
image

typescript version 5.4.5

@jussirantala
Copy link
Author

If the type was any instead of unknown, I think it would work.

@thecrypticace
Copy link
Contributor

I swear worked at one point but yeah aliasing to a different type does not in function argument position. Will get a fixed merged in for that.

@thecrypticace
Copy link
Contributor

thecrypticace commented Jun 25, 2024

I think we're aiming to tag a release today — but if not then tomorrow. 👍

In the meantime you can use our insiders build once it's updated (may take a few minutes):

npm install @headlessui/react@insiders

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants