Son CV dans un terminal web en Javascript!
https://terminal-cv.gregandev.fr
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
5.2 KiB
156 lines
5.2 KiB
import { SetComplement, DeepReadonly } from './mapped-types';
|
|
/**
|
|
* $Keys
|
|
* @desc Get the union type of all the keys in an object type `T`
|
|
* @see https://flow.org/en/docs/types/utilities/#toc-keys
|
|
* @example
|
|
* type Props = { name: string; age: number; visible: boolean };
|
|
*
|
|
* // Expect: "name" | "age" | "visible"
|
|
* type PropsKeys = $Keys<Props>;
|
|
*/
|
|
export declare type $Keys<T extends object> = keyof T;
|
|
/**
|
|
* $Values
|
|
* @desc Get the union type of all the values in an object type `T`
|
|
* @see https://flow.org/en/docs/types/utilities/#toc-values
|
|
* @example
|
|
* type Props = { name: string; age: number; visible: boolean };
|
|
*
|
|
* // Expect: string | number | boolean
|
|
* type PropsValues = $Values<Props>;
|
|
*/
|
|
export declare type $Values<T extends object> = T[keyof T];
|
|
/**
|
|
* $ReadOnly
|
|
* @desc Get the read-only version of a given object type `T` (it works on nested data structure)
|
|
* @see https://flow.org/en/docs/types/utilities/#toc-readonly
|
|
* @example
|
|
* type Props = { name: string; age: number; visible: boolean };
|
|
*
|
|
* // Expect: Readonly<{ name: string; age?: number | undefined; visible: boolean; }>
|
|
* type ReadOnlyProps = $ReadOnly<Props>;
|
|
*/
|
|
export declare type $ReadOnly<T extends object> = DeepReadonly<T>;
|
|
/**
|
|
* $Diff
|
|
* @desc Get the set difference of a given object types `T` and `U` (`T \ U`)
|
|
* @see https://flow.org/en/docs/types/utilities/#toc-diff
|
|
* @example
|
|
* type Props = { name: string; age: number; visible: boolean };
|
|
* type DefaultProps = { age: number };
|
|
*
|
|
* // Expect: { name: string; visible: boolean; }
|
|
* type RequiredProps = Diff<Props, DefaultProps>;
|
|
*/
|
|
export declare type $Diff<T extends U, U extends object> = Pick<T, SetComplement<keyof T, keyof U>>;
|
|
/**
|
|
* $PropertyType
|
|
* @desc Get the type of property of an object at a given key `K`
|
|
* @see https://flow.org/en/docs/types/utilities/#toc-propertytype
|
|
* @example
|
|
* // Expect: string;
|
|
* type Props = { name: string; age: number; visible: boolean };
|
|
* type NameType = $PropertyType<Props, 'name'>;
|
|
*
|
|
* // Expect: boolean
|
|
* type Tuple = [boolean, number];
|
|
* type A = $PropertyType<Tuple, '0'>;
|
|
* // Expect: number
|
|
* type B = $PropertyType<Tuple, '1'>;
|
|
*/
|
|
export declare type $PropertyType<T extends object, K extends keyof T> = T[K];
|
|
/**
|
|
* $ElementType
|
|
* @desc Get the type of elements inside of array, tuple or object of type `T`, that matches the given index type `K`
|
|
* @see https://flow.org/en/docs/types/utilities/#toc-elementtype
|
|
* @example
|
|
* // Expect: string;
|
|
* type Props = { name: string; age: number; visible: boolean };
|
|
* type NameType = $ElementType<Props, 'name'>;
|
|
*
|
|
* // Expect: boolean
|
|
* type Tuple = [boolean, number];
|
|
* type A = $ElementType<Tuple, '0'>;
|
|
* // Expect: number
|
|
* type B = $ElementType<Tuple, '1'>;
|
|
*
|
|
* // Expect: boolean
|
|
* type Arr = boolean[];
|
|
* type ItemsType = $ElementType<Arr, number>;
|
|
*
|
|
* // Expect: number
|
|
* type Obj = { [key: string]: number };
|
|
* type ValuesType = $ElementType<Obj, string>;
|
|
*/
|
|
export declare type $ElementType<T extends {
|
|
[P in K & any]: any;
|
|
}, K extends keyof T | number> = T[K];
|
|
/**
|
|
* $Call
|
|
* @desc Get the return type from a given typeof expression
|
|
* @see https://flow.org/en/docs/types/utilities/#toc-call
|
|
* @example
|
|
* // Common use-case
|
|
* const add = (amount: number) => ({ type: 'ADD' as 'ADD', payload: amount });
|
|
* type AddAction = $Call<typeof returnOfIncrement>; // { type: 'ADD'; payload: number }
|
|
*
|
|
* // Examples migrated from Flow docs
|
|
* type ExtractPropType<T extends { prop: any }> = (arg: T) => T['prop'];
|
|
* type Obj = { prop: number };
|
|
* type PropType = $Call<ExtractPropType<Obj>>; // number
|
|
*
|
|
* type ExtractReturnType<T extends () => any> = (arg: T) => ReturnType<T>;
|
|
* type Fn = () => number;
|
|
* type FnReturnType = $Call<ExtractReturnType<Fn>>; // number
|
|
*/
|
|
export declare type $Call<Fn extends (...args: any[]) => any> = Fn extends (arg: any) => infer RT ? RT : never;
|
|
/**
|
|
* $Shape
|
|
* @desc Copies the shape of the type supplied, but marks every field optional.
|
|
* @see https://flow.org/en/docs/types/utilities/#toc-shape
|
|
* @example
|
|
* type Props = { name: string; age: number; visible: boolean };
|
|
*
|
|
* // Expect: Partial<Props>
|
|
* type PartialProps = $Shape<Props>;
|
|
*/
|
|
export declare type $Shape<T extends object> = Partial<T>;
|
|
/**
|
|
* $NonMaybeType
|
|
* @desc Excludes null and undefined from T
|
|
* @see https://flow.org/en/docs/types/utilities/#toc-nonmaybe
|
|
* @example
|
|
* type MaybeName = string | null;
|
|
*
|
|
* // Expect: string
|
|
* type Name = $NonMaybeType<MaybeName>;
|
|
*/
|
|
export declare type $NonMaybeType<T> = NonNullable<T>;
|
|
/**
|
|
* Class
|
|
* @desc Represents constructor of type T
|
|
* @see https://flow.org/en/docs/types/utilities/#toc-class
|
|
* @example
|
|
* class Store {}
|
|
* function makeStore(storeClass: Class<Store>): Store {
|
|
* return new storeClass();
|
|
* }
|
|
*/
|
|
export declare type Class<T> = new (...args: any[]) => T;
|
|
/**
|
|
* mixed
|
|
* @desc An arbitrary type that could be anything
|
|
* @see https://flow.org/en/docs/types/mixed
|
|
* @example
|
|
*
|
|
* function stringify(value: mixed) {
|
|
* // ...
|
|
* }
|
|
*
|
|
* stringify("foo");
|
|
* stringify(3.14);
|
|
* stringify(null);
|
|
* stringify({});
|
|
*/
|
|
export declare type mixed = unknown;
|
|
|