mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
df5cd55cdb
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52280 Changelog: [Internal] Adds a type-simplifyng transform for the API snapshot, with the goal of resolving some built-in TS types during build time. Most notably, it's able to simplify `Omit` structures emitted by the `flow-api-translator` when translating Flow's type spread operator. It builds upon a simplified type inlining transform from the previous approach. The type inlining transform is able to handle inlining type references and resolution of built-in TS types on literal types: - `Omit` - `Readonly` - `Partial` - `keyof` Reference inlining is performed top-down and built-in type resolution is performed bottom-up, which makes it possible for the second step to assume working on type literals. Type simplifying transform uses the type inlining to reduce type references encountered inside `Omits` to their literal shapes, which makes possible to determine whether `Omit` is neccessary case-by-case. If `Omit` is redundant, it can be safely removed. If it's not, the omitted keys can be reduced to represent a subset of keys existing in the target type. It also keeps the ability to resolve `Partial` and `Readonly` types on type literals, simplifying the snapshot further. An example diff the transform can handle: Before: ``` export declare type AccessibilityProps = Readonly< Omit< AccessibilityPropsAndroid, | keyof { accessibilityActions?: ReadonlyArray<AccessibilityActionInfo> accessibilityHint?: string accessibilityLabel?: string accessibilityRole?: AccessibilityRole accessibilityState?: AccessibilityState accessibilityValue?: AccessibilityValue accessible?: boolean "aria-busy"?: boolean "aria-checked"?: "mixed" | (boolean | undefined) "aria-disabled"?: boolean "aria-expanded"?: boolean "aria-hidden"?: boolean "aria-label"?: string "aria-selected"?: boolean "aria-valuemax"?: AccessibilityValue["max"] "aria-valuemin"?: AccessibilityValue["min"] "aria-valuenow"?: AccessibilityValue["now"] "aria-valuetext"?: AccessibilityValue["text"] role?: Role } | keyof AccessibilityPropsIOS > & Omit< AccessibilityPropsIOS, keyof { accessibilityActions?: ReadonlyArray<AccessibilityActionInfo> accessibilityHint?: string accessibilityLabel?: string accessibilityRole?: AccessibilityRole accessibilityState?: AccessibilityState accessibilityValue?: AccessibilityValue accessible?: boolean "aria-busy"?: boolean "aria-checked"?: "mixed" | (boolean | undefined) "aria-disabled"?: boolean "aria-expanded"?: boolean "aria-hidden"?: boolean "aria-label"?: string "aria-selected"?: boolean "aria-valuemax"?: AccessibilityValue["max"] "aria-valuemin"?: AccessibilityValue["min"] "aria-valuenow"?: AccessibilityValue["now"] "aria-valuetext"?: AccessibilityValue["text"] role?: Role } > & { accessibilityActions?: ReadonlyArray<AccessibilityActionInfo> accessibilityHint?: string accessibilityLabel?: string accessibilityRole?: AccessibilityRole accessibilityState?: AccessibilityState accessibilityValue?: AccessibilityValue accessible?: boolean "aria-busy"?: boolean "aria-checked"?: "mixed" | (boolean | undefined) "aria-disabled"?: boolean "aria-expanded"?: boolean "aria-hidden"?: boolean "aria-label"?: string "aria-selected"?: boolean "aria-valuemax"?: AccessibilityValue["max"] "aria-valuemin"?: AccessibilityValue["min"] "aria-valuenow"?: AccessibilityValue["now"] "aria-valuetext"?: AccessibilityValue["text"] role?: Role } > ``` After: ``` export declare type AccessibilityProps = Readonly< AccessibilityPropsAndroid & AccessibilityPropsIOS & { accessibilityActions?: ReadonlyArray<AccessibilityActionInfo> accessibilityHint?: string accessibilityLabel?: string accessibilityRole?: AccessibilityRole accessibilityState?: AccessibilityState accessibilityValue?: AccessibilityValue accessible?: boolean "aria-busy"?: boolean "aria-checked"?: "mixed" | (boolean | undefined) "aria-disabled"?: boolean "aria-expanded"?: boolean "aria-hidden"?: boolean "aria-label"?: string "aria-selected"?: boolean "aria-valuemax"?: AccessibilityValue["max"] "aria-valuemin"?: AccessibilityValue["min"] "aria-valuenow"?: AccessibilityValue["now"] "aria-valuetext"?: AccessibilityValue["text"] role?: Role } > ``` Reviewed By: huntie Differential Revision: D77295302 fbshipit-source-id: 213aef46035bde4f9783353b5344a6986a418399