[react-native] Make requireNativeComponent work with an update to @types/react

4dd9510a50 changed `React.ReactType` to look at entries in the `JSX.IntrinsicElements` map, which caused rendering `React.ReactType<any>` elements to fail. This commit fixes the RN type declarations by returning `any`. We don't care about the actual return type that much -- it's concretely a string but externally, as a user of react-native, you'd want to only use it as a JSX component type and not as a string.

And since it's a string that isn't registered with `JSX.IntrinsicElements`, there's no extra type information (ex: list of valid props) associated with it. Longer term, it might make sense for `@types/react-native` to add native component types like `RCTView` to `JSX.IntrinsicElements` and go back to using `React.ReactType<'RCTView'>` with `requireNativeComponent`, but this is a disruptive change.

Test plan: Ran tests, verified they pass again.

Fixes #30958.
This commit is contained in:
James Ide
2018-11-30 10:17:33 -08:00
parent 8d8a70d0f4
commit 65430a8a7b
+4 -1
View File
@@ -9037,8 +9037,11 @@ export const PixelRatio: PixelRatioStatic;
*
* const View = requireNativeComponent('RCTView');
*
* The concrete return type of `requireNativeComponent` is a string, but the declared type is
* `any` because TypeScript assumes anonymous JSX intrinsics (`string` instead of `"div", for
* example) not to have any props.
*/
export function requireNativeComponent(viewName: string): React.ReactType;
export function requireNativeComponent(viewName: string): any;
export function findNodeHandle(
componentOrHandle: null | number | React.Component<any, any> | React.ComponentClass<any>