diff --git a/types/prop-types/index.d.ts b/types/prop-types/index.d.ts index fe521031d9..f6176dd59d 100644 --- a/types/prop-types/index.d.ts +++ b/types/prop-types/index.d.ts @@ -5,46 +5,18 @@ // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.8 -export interface ReactElementLike { - type: string | ((...args: any[]) => ReactElementLike); - props: any; - key: string | number | null; - children?: ReactNodeLike; -} - -export interface ReactNodeArray extends Array {} - -export type ReactNodeLike = - | {} - | ReactElementLike - | ReactNodeArray - | string - | number - | boolean - | null - | undefined; +import { ReactNode, ReactElement } from 'react'; export const nominalTypeHack: unique symbol; -export type IsOptional = undefined | null extends T - ? true - : undefined extends T ? true : null extends T ? true : false; -export type RequiredKeys = { - [K in keyof V]: V[K] extends Validator - ? IsOptional extends true ? never : K - : never -}[keyof V]; +export type IsOptional = undefined | null extends T ? true : undefined extends T ? true : null extends T ? true : false; + +export type RequiredKeys = { [K in keyof V]: V[K] extends Validator ? IsOptional extends true ? never : K : never }[keyof V]; export type OptionalKeys = Exclude>; -export type InferPropsInner = { [K in keyof V]: InferType }; +export type InferPropsInner = { [K in keyof V]: InferType; }; export interface Validator { - ( - props: object, - propName: string, - componentName: string, - location: string, - propFullName: string, - ): Error | null; + (props: object, propName: string, componentName: string, location: string, propFullName: string): Error | null; [nominalTypeHack]?: T; } @@ -55,8 +27,9 @@ export interface Requireable extends Validator { export type ValidationMap = { [K in keyof T]-?: Validator }; export type InferType = V extends Validator ? T : any; -export type InferProps = InferPropsInner>> & - Partial>>>; +export type InferProps = + & InferPropsInner>> + & Partial>>>; export const any: Requireable; export const array: Requireable; @@ -65,16 +38,14 @@ export const func: Requireable<(...args: any[]) => any>; export const number: Requireable; export const object: Requireable; export const string: Requireable; -export const node: Requireable; -export const element: Requireable; +export const node: Requireable; +export const element: Requireable>; export const symbol: Requireable; export function instanceOf(expectedClass: new (...args: any[]) => T): Requireable; export function oneOf(types: T[]): Requireable; -export function oneOfType>( - types: T[], -): Requireable>>; +export function oneOfType>(types: T[]): Requireable>>; export function arrayOf(type: Validator): Requireable; -export function objectOf(type: Validator): Requireable<{ [K in keyof any]: T }>; +export function objectOf(type: Validator): Requireable<{ [K in keyof any]: T; }>; export function shape

>(type: P): Requireable>; export function exact

>(type: P): Requireable>>; @@ -88,10 +59,4 @@ export function exact

>(type: P): Requireable any, -): void; +export function checkPropTypes(typeSpecs: any, values: any, location: string, componentName: string, getStack?: () => any): void;