From 9050d36d5763beabb1a642819dd24d61cccb3ffe Mon Sep 17 00:00:00 2001 From: Kitson Kelly Date: Tue, 17 Mar 2020 23:28:07 +1100 Subject: std: Provide types for React and ReactDOM (#4376) Introduces `std/types` which is designed to provide types for common libraries that are compatible with Deno. --- std/types/react/prop-types.d.ts | 123 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 std/types/react/prop-types.d.ts (limited to 'std/types/react/prop-types.d.ts') diff --git a/std/types/react/prop-types.d.ts b/std/types/react/prop-types.d.ts new file mode 100644 index 000000000..0bb0e47e9 --- /dev/null +++ b/std/types/react/prop-types.d.ts @@ -0,0 +1,123 @@ +// These types are adapted from +// https://github.com/DefinitelyTyped/DefinitelyTyped to work under Deno. +// +// Type definitions for prop-types 15.7 +// Project: https://github.com/reactjs/prop-types, https://facebook.github.io/react +// Definitions by: DovydasNavickas +// Ferdy Budhidharma +// Sebastian Silbermann +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.8 + +/* eslint-disable */ +export type ReactComponentLike = + | string + | ((props: any, context?: any) => any) + | (new (props: any, context?: any) => any); + +export interface ReactElementLike { + type: ReactComponentLike; + props: any; + key: string | number | null; +} + +export interface ReactNodeArray extends Array {} + +export type ReactNodeLike = + | {} + | ReactElementLike + | ReactNodeArray + | string + | number + | boolean + | null + | undefined; + +export const nominalTypeHack: unique symbol; + +export type IsOptional = undefined extends T ? true : false; + +export type RequiredKeys = { + [K in keyof V]-?: Exclude 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: { [key: string]: any }, + propName: string, + componentName: string, + location: string, + propFullName: string + ): Error | null; + [nominalTypeHack]?: { + type: 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 const elementType: Requireable; +export function instanceOf( + expectedClass: new (...args: any[]) => T +): Requireable; +export function oneOf(types: ReadonlyArray): 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>; +export function exact

>( + 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; + +/** + * Only available if NODE_ENV=production + */ +export function resetWarningCache(): void; -- cgit v1.2.3