TypeScript: Support exactOptionalPropertyTypes for public API types
#33149
+16
−16
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #XXXXX
What I did
Users with
exactOptionalPropertyTypes: truecould not passundefinedto optional type properties likeargTypes.table.type.summarydue to TypeScript's strict interpretation ofprop?: string(allows omission only, not explicitundefined).Updated public API type definitions to explicitly allow
undefined:PropSummaryValue(PropDef.ts, ArgsTable/types.ts):summary?: string→summary?: string | undefinedInputType.table(story.ts, ArgsTable/types.ts): Added| undefinedtotype.summary,type.detail,defaultValue.summary,defaultValue.detailComponentManifest(core-common.ts): Added| undefinedtodescription,import,summary,snippetfieldsUsers can now suppress automatic summary generation:
Changes are backward compatible—users without
exactOptionalPropertyTypesare unaffected.Checklist for Contributors
Testing
The changes in this PR are covered in the following automated tests:
Manual testing
Not required—changes are type-only. Verified with TypeScript compiler that:
undefinedwithexactOptionalPropertyTypes: trueDocumentation
MIGRATION.MD
Checklist for Maintainers
When this PR is ready for testing, make sure to add
ci:normal,ci:mergedorci:dailyGH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found incode/lib/cli-storybook/src/sandbox-templates.tsMake 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/coreteam here.core team members can create a canary release here or locally with
gh workflow run --repo storybookjs/storybook publish.yml --field pr=<PR_NUMBER>Original prompt
summary: undefinedtype issue #27129💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.