-
Notifications
You must be signed in to change notification settings - Fork 107
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
Fix complex value return type inference #102
Fix complex value return type inference #102
Conversation
|
I've looked at this and played around a bit. It's definitely an improvement. The previous abstraction was unnecessary. However, it doesn't seem to work with |
To clarify: this PR doesn't break the type inference for So this could be merged as an improvement even if |
Did some testing with this - it looks like in basic cases, groups should just work™! Take this example from the docs: Complex values work as well, like in the example from #44:
However, the fun comes in when you try to use This unfortunately makes sense - the resulting type of the There's also the unfortunate reality that each of the values in In a world of no backwards compat, it might be simpler to structure groups with a builder-style pattern. Something like: const results = await group()
.addStep('name', () => text({ message: 'What is your name?' }))
.addStep('age', () => text({ message: 'What is your age?' }))
.addStep('color', ({ results }) =>
multiselect({
message: `What is your favorite color ${results.name}?`,
options: [
{ value: 'red', label: 'Red' },
{ value: 'green', label: 'Green' },
{ value: 'blue', label: 'Blue' },
],
})
)
.prompt(); This way, the type of How we move forward here is really up to you all. I understand if we don't want to make any breaking API changes, but I don't see how to feasibly wrangle the types here. Then again, there's definitely a good chance I'm misinterpreting the root issue here, so I'm open to other thoughts! Though I think this issue is important (and should likely be tracked via a separate issue), imo this PR is unrelated and should be handled separately. Unless I'm missing anything, this one should be ready to go! |
Does If not, I'll go ahead and merge this. |
6520f40
to
c8c4e16
Compare
hmm, looks like my theory was wrong - just rebased with the latest TS should have all the info it needs to infer types, but I wonder if it bails as soon as any individual prompts consume Regardless, I agree this should be good to merge (feel free to add a changeset if you'd like) - let's track in a separate issue. |
Why hasn't it been merged? |
@Mist3rBru I wanted to merge this! I wanted to make sure there hasn't been any conflicts with the changes from the changes merged is latest release. I will look into this today! |
@chrissantamaria Is it possible you can add Thanks! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
This PR addresses in an issue discussed in #44, where
select
fields with non-primitive values (originally introduced in #86) are not properly inferring the type of the returned user selection.I did so by removing the
Options
generic from all fields as, from what I can tell, it's effectively representing the same constraint asValue
. Typechecking for the build still passes, but there's a chance I broke type inference in some other use case - please double check me here!