// Type definitions for prop-types 15.5 // Project: https://github.com/reactjs/prop-types // Definitions by: DovydasNavickas // Ferdy Budhidharma // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.8 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 OptionalKeys = Exclude>; export type InferPropsInner = { [K in keyof V]: InferType; }; export interface Validator { (props: object, propName: string, componentName: string, location: string, propFullName: string): Error | null; [nominalTypeHack]?: T; } export interface Requireable extends Validator { isRequired: Validator>; } export type ValidationMap = { [K in keyof T]-?: Validator }; export type InferType = V extends Validator ? T : any; export type InferProps = & InferPropsInner>> & Partial>>>; export const any: Requireable; export const array: Requireable; export const bool: Requireable; 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 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 arrayOf(type: Validator): Requireable; export function objectOf(type: Validator): Requireable<{ [K in keyof any]: T; }>; export function shape

>(type: P): Requireable>; /** * Assert that the values match with the type specs. * Error messages are memorized and will only be shown once. * * @param typeSpecs Map of name to a ReactPropType * @param values Runtime values that need to be type-checked * @param location e.g. "prop", "context", "child context" * @param componentName Name of the component for error messages. * @param getStack Returns the component stack. */ export function checkPropTypes(typeSpecs: any, values: any, location: string, componentName: string, getStack?: () => any): void;