Skip to content

Conversation

gingeekrishna
Copy link
Contributor

@gingeekrishna gingeekrishna commented Jul 23, 2025

Closes #25070

  • Enhanced preview-api useArgs with readonly tuple and 'as const' for better type inference
  • Added useDocsArgs to docs blocks to prevent naming conflicts
  • Maintained backward compatibility with deprecated useArgs in docs

What I did

Checklist for Contributors

Testing

The changes in this PR are covered in the following automated tests:

  • stories
  • unit tests
  • integration tests
  • end-to-end tests

Manual testing

This section is mandatory for all contributions. If you believe no manual test is necessary, please state so explicitly. Thanks!

Documentation

  • Add or update documentation reflecting your changes
  • If you are deprecating/removing a feature, make sure to update
    MIGRATION.MD

Checklist for Maintainers

  • When this PR is ready for testing, make sure to add ci:normal, ci:merged or ci:daily GH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found in code/lib/cli-storybook/src/sandbox-templates.ts

  • Make sure this PR contains one of the labels below:

    Available labels
    • bug: Internal changes that fixes incorrect behavior.
    • maintenance: User-facing maintenance tasks.
    • dependencies: Upgrading (sometimes downgrading) dependencies.
    • build: Internal-facing build tooling & test updates. Will not show up in release changelog.
    • cleanup: Minor cleanup style change. Will not show up in release changelog.
    • documentation: Documentation only changes. Will not show up in release changelog.
    • feature request: Introducing a new feature.
    • BREAKING CHANGE: Changes that break compatibility in some way with current major version.
    • other: Changes that don't fit in the above categories.

🦋 Canary release

This PR does not have a canary release associated. You can request a canary release of this pull request by mentioning the @storybookjs/core team here.

core team members can create a canary release here or locally with gh workflow run --repo storybookjs/storybook canary-release-pr.yml --field pr=<PR_NUMBER>

Greptile Summary

This PR fixes a TypeScript generic typing issue with the useArgs hook that was broken when upgrading from Storybook version 7.4.6 to 7.6.2. The core problem was that TypeScript wasn't properly inferring the tuple type for useArgs<TGeneric>, causing the generic type parameter to be lost.

The fix involves two key changes:

  1. Enhanced the preview-api useArgs hook: Modified the return type from a regular array to a readonly tuple with 'as const' assertion. This ensures TypeScript treats the return value as a specific tuple type rather than a general array type, preserving generic type information.

  2. Added useDocsArgs to docs blocks: Created a new function to prevent naming conflicts between the docs-specific useArgs (non-generic, tied to docs context) and the generic useArgs from preview-api. The original docs useArgs is deprecated but maintained for backward compatibility.

The changes integrate well with the existing codebase - the preview-api hook maintains its core functionality while improving type safety, and the docs blocks solution prevents conflicts without breaking existing implementations that depend on the docs-specific version.

Confidence score: 4/5

  • This is a targeted TypeScript fix that addresses a specific generic typing issue without changing core functionality
  • The readonly tuple approach is a standard TypeScript pattern for preserving tuple types and preventing mutations
  • The naming conflict resolution in docs blocks maintains backward compatibility while providing a clear migration path
  • Some files need attention for potential impact on consumers and to ensure the deprecation is properly communicated

- Enhanced preview-api useArgs with readonly tuple and 'as const' for better type inference
- Added useDocsArgs to docs blocks to prevent naming conflicts
- Maintained backward compatibility with deprecated useArgs in docs

Fixes: storybookjs#25070
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 files reviewed, 2 comments

Edit Code Review Bot Settings | Greptile

- Add missing useArgs export to blocks index
- Simplify deprecated useArgs to delegate to useDocsArgs
- Ensure consistent function signatures
@storybook-pr-benchmarking
Copy link

storybook-pr-benchmarking bot commented Aug 7, 2025

Package Benchmarks

Commit: 548e78a, ran on 6 September 2025 at 17:28:44 UTC

No significant changes detected, all good. 👏

Copy link

nx-cloud bot commented Aug 8, 2025

View your CI Pipeline Execution ↗ for commit 548e78a

Command Status Duration Result
nx run-many -t build --parallel=3 ✅ Succeeded 46s View ↗

☁️ Nx Cloud last updated this comment at 2025-09-06 17:40:26 UTC

@gingeekrishna
Copy link
Contributor Author

@valentinpalkovic any update on this PR?

@github-actions github-actions bot added the Stale label Aug 29, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug]: Broken types for useArgs<generic>
3 participants