-
Notifications
You must be signed in to change notification settings - Fork 24.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move TypeScript declarations into react-native (#34614)
Summary: ## Changelog [General] [Added] - Add `types` folder to house TypeScript types. Release TypesScript types with react-native and eventually deprecate [types/react-native](https://www.npmjs.com/package/types/react-native). The current plan is to release types/react-native for 0.70 and 0.71 while also maintaining types here. This will result in some double maintenance until 0.72 but will give community time to move off of types/react-native. After this lands, there have been changes on `main` of types that we need to update. Then, when we release 0.71 from DefinitelyTyped, we can simply copy over the `types` folder from this repo. Pull Request resolved: #34614 Test Plan: `yarn run test-typescript` for linting types * Created a new project using the TS template and my local clone of `react-native` on this branch. `npx react-native init MyTSApp --version <path-to-my-local-rn-repo> --template react-native-template-typescript` * Updated the `package.json` to remove `types/react-native` * Deleted my node_modules and re-ran yarn * Opened MyTSApp in VSCode and verified the type suggestions appeared and cmd+click to defnitions took me to the node_module dependency `react-native/types` ## Danger is failing on this PR and it's expected as it runs off the changes on `main`. [This is expected](https://docs.github.com/en/github-ae@latest/actions/using-workflows/events-that-trigger-workflows?fbclid=IwAR2_AE0Jwndt8Gu-iTQnxGxLJq7nakbi7sz8jwZ6U62JWLSdcZuvjcQ6WvE#pull_request_target). However testing it locally passes ``` $ react-native/packages/react-native-bots ❯ yarn danger pr #34614 yarn run v1.22.19 $ ..react-native/node_modules/.bin/danger pr #34614 Starting Danger PR on #34614 Danger: ✓ found only warnings, not failing the build ## Warnings :lock: package.json - <i>Changes were made to package.json. This will require a manual import by a Facebook employee.</i> ✨ Done in 13.24s. ``` Differential Revision: D39479137 Pulled By: lunaleaps fbshipit-source-id: 3e2202b0436e7cb75101b042be916d3ba211d9f5
- Loading branch information
1 parent
59dc7f1
commit 3f7439d
Showing
22 changed files
with
15,336 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/** | ||
* Copyright (c) Meta Platforms, Inc. and affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
* | ||
* @format | ||
*/ | ||
|
||
interface SpyData { | ||
type: number; | ||
module?: string | undefined; | ||
method: string | number; | ||
args: any[]; | ||
} | ||
|
||
declare class MessageQueue { | ||
static spy(spyOrToggle: boolean | ((data: SpyData) => void)): void; | ||
|
||
getCallableModule(name: string): Object; | ||
registerCallableModule(name: string, module: Object): void; | ||
registerLazyCallableModule(name: string, factory: () => Object): void; | ||
} | ||
|
||
declare module 'react-native/Libraries/BatchedBridge/BatchedBridge' { | ||
const BatchedBridge: MessageQueue; | ||
export default BatchedBridge; | ||
} | ||
|
||
declare module 'react-native/Libraries/BatchedBridge/MessageQueue' { | ||
export default MessageQueue; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
/** | ||
* Copyright (c) Meta Platforms, Inc. and affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
* | ||
* @format | ||
*/ | ||
|
||
declare module 'react-native/Libraries/Utilities/codegenNativeCommands' { | ||
export interface Options<T extends string> { | ||
readonly supportedCommands: ReadonlyArray<T>; | ||
} | ||
|
||
function codegenNativeCommands<T extends object>( | ||
options: Options<keyof T extends string ? keyof T : never>, | ||
): T; | ||
|
||
export default codegenNativeCommands; | ||
} | ||
|
||
declare module 'react-native/Libraries/Utilities/codegenNativeComponent' { | ||
import type {HostComponent} from 'react-native'; | ||
|
||
export interface Options { | ||
readonly interfaceOnly?: boolean; | ||
readonly paperComponentName?: string; | ||
readonly paperComponentNameDeprecated?: string; | ||
readonly excludedPlatforms?: ReadonlyArray<'iOS' | 'android'>; | ||
} | ||
|
||
export type NativeComponentType<T> = HostComponent<T>; | ||
|
||
function codegenNativeComponent<Props extends object>( | ||
componentName: string, | ||
options?: Options, | ||
): NativeComponentType<Props>; | ||
|
||
export default codegenNativeComponent; | ||
} | ||
|
||
declare module 'react-native/Libraries/Types/CodegenTypes' { | ||
import type {NativeSyntheticEvent} from 'react-native'; | ||
|
||
// Event types | ||
// We're not using the PaperName, it is only used to codegen view config settings | ||
|
||
export type BubblingEventHandler< | ||
T, | ||
PaperName extends string | never = never, | ||
> = (event: NativeSyntheticEvent<T>) => void | Promise<void>; | ||
export type DirectEventHandler< | ||
T, | ||
PaperName extends string | never = never, | ||
> = (event: NativeSyntheticEvent<T>) => void | Promise<void>; | ||
|
||
// Prop types | ||
export type Double = number; | ||
export type Float = number; | ||
export type Int32 = number; | ||
export type UnsafeObject = object; | ||
|
||
type DefaultTypes = number | boolean | string | ReadonlyArray<string>; | ||
// Default handling, ignore the unused value | ||
// we're only using it for type checking | ||
// | ||
// TODO: (rickhanlonii) T44881457 If a default is provided, it should always be optional | ||
// but that is currently not supported in the codegen since we require a default | ||
|
||
export type WithDefault< | ||
Type extends DefaultTypes, | ||
Value extends Type | string | undefined | null, | ||
> = Type | undefined | null; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
/** | ||
* Copyright (c) Meta Platforms, Inc. and affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
* | ||
* @format | ||
*/ | ||
|
||
declare module 'react-native/Libraries/Core/Devtools/parseErrorStack' { | ||
export type StackFrame = { | ||
file: string; | ||
methodName: string; | ||
lineNumber: number; | ||
column: number | null; | ||
}; | ||
|
||
export interface ExtendedError extends Error { | ||
framesToPop?: number | undefined; | ||
} | ||
|
||
export default function parseErrorStack(error: ExtendedError): StackFrame[]; | ||
} | ||
|
||
declare module 'react-native/Libraries/Core/Devtools/symbolicateStackTrace' { | ||
import {StackFrame} from 'react-native/Libraries/Core/Devtools/parseErrorStack'; | ||
|
||
export default function symbolicateStackTrace( | ||
stack: ReadonlyArray<StackFrame>, | ||
): Promise<StackFrame[]>; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
/** | ||
* Copyright (c) Meta Platforms, Inc. and affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
* | ||
* @format | ||
*/ | ||
|
||
// Adds the JSX elements used in the launch screen. | ||
|
||
declare module 'react-native/Libraries/NewAppScreen' { | ||
export const Header: any; | ||
export const LearnMoreLinks: any; | ||
export const Colors: any; | ||
export const DebugInstructions: any; | ||
export const ReloadInstructions: any; | ||
} |
Oops, something went wrong.