Skip to content

Convert additional Props/Style types to interface - #58062

Open
huntie wants to merge 1 commit into
react:mainfrom
huntie:fix-definitely-typed-interfaces
Open

Convert additional Props/Style types to interface#58062
huntie wants to merge 1 commit into
react:mainfrom
huntie:fix-definitely-typed-interfaces

Conversation

@huntie

@huntie huntie commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Summary

In response to this comment: #57490 (comment)

The DefinitelyTyped react-native-web types augment the react-native module to layer web-only props and style values onto React Native's types. Module augmentation only works against interface declarations, so these hit error TS2300: Duplicate identifier.

This was solved in #56809 — this diff extends interface emission to additional types as below.

Changes

Annotate the remaining types that @types/react-native-web augments with @build-types emit-as-interface:

  • AccessibilityProps
  • ImageProps
  • PressableStateCallbackType
  • ViewStyle, TextStyle, ImageStyle

Source for matched @types/react-native-web conflicts

Type Declared in Augmented by @types/react-native-web
AccessibilityProps Libraries/Components/View/ViewAccessibility.js:342 index.d.ts#L1272
ImageProps Libraries/Image/ImageProps.js:336 index.d.ts#L1422
PressableStateCallbackType Libraries/Components/Pressable/Pressable.js:36 index.d.ts#L1444
ViewStyle Libraries/StyleSheet/StyleSheet.js.flow:141 index.d.ts#L1458
TextStyle Libraries/StyleSheet/StyleSheet.js.flow:159 index.d.ts#L1486
ImageStyle Libraries/StyleSheet/StyleSheet.js.flow:177 index.d.ts#L1514

Not fixed

The remaining DT failures (parsed from https://github.com/DefinitelyTyped/DefinitelyTyped/actions/runs/32138113480) aren't interface issues:

  • InteractionManager has no export in the Strict API at all.
  • VirtualizedListProps is genuinely non-generic in the Flow source (packages/virtualized-lists/Lists/VirtualizedListProps.js:287), and getItem / getItemCount are required there. DT's VirtualizedListProps<ItemT> with those omitted is an assumption carried over from the old hand-written types.
  • The ViewStyle / TextStyle / ImageStyle "incorrectly extends WebStyle" errors will persist. RN's DimensionValue includes null, and DT redefines bottom?: CSSProperties["bottom"] | DimensionValue on an interface extending WebStyle, whose bottom does not accept null. DT needs Exclude<DimensionValue, null> there. Expect 3 of the 16 reported errors to remain once the duplicate-identifier ones clear.

cc @jakebailey

Changelog:
[General][Fixed] - JS API: Additional Props/Style types are now defined as interface, fixing compatibility with certain DefinitelyTyped packages

Test Plan

  • node ./scripts/js-api/build-types — snapshot regenerated; --validate passes
  • yarn test-generated-typescript, yarn test-typescript — pass
  • yarn jest scripts/js-api — 141 tests pass
  • Scratch project replaying react-native-web's augmentations against types_generated: all six now merge cleanly. As a control, augmenting ImagePropsAndroid (still a type alias) in the same harness reproduces error TS2300: Duplicate identifier, confirming the harness detects the failure mode.

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Aug 21, 2026
@github-actions

Copy link
Copy Markdown

Warning

JavaScript API change detected

This PR commits an update to ReactNativeApi.d.ts, indicating a change to React Native's public JavaScript API.

  • Please include a clear changelog message.
  • This change will be subject to additional review.

This change was flagged as: POTENTIALLY_BREAKING

@huntie
huntie force-pushed the fix-definitely-typed-interfaces branch from c359385 to 57b788f Compare August 21, 2026 14:58
@facebook-github-tools facebook-github-tools Bot added the Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. label Aug 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant