ts-prime
Version:
A utility library for JavaScript and Typescript.
117 lines • 3.32 kB
TypeScript
/**
* Extracts Promise value
* @example
* export function example(): Promise<number> { ... }
*
* type E = PromiseValueOf<ReturnType<typeof example>>
*
* // type: number
* @category Type
*/
export declare type PromiseValueOf<O> = O extends Promise<infer T> ? T : never;
/**
* NonNullable that works for deeply nested structure
* @example
* // Expect: {
* // first: {
* // second: {
* // name: string;
* // };
* // };
* // }
* type NestedProps = {
* first?: null | {
* second?: null | {
* name?: string | null |
* undefined;
* };
* };
* };
* type RequiredNestedProps = DeepNonNullable<NestedProps>;
* @category Type
*/
export declare type DeepNonNullable<T> = T extends (...args: any[]) => any ? T : T extends any[] ? DeepNonNullableArray<T[number]> : T extends object ? DeepNonNullableObject<T> : T;
/**
* Partial that works for deeply nested structure
* @example
* // Expect: {
* // first?: {
* // second?: {
* // name?: string;
* // };
* // };
* // }
* type NestedProps = {
* first: {
* second: {
* name: string;
* };
* };
* };
* type PartialNestedProps = DeepPartial<NestedProps>;
* @category Type
*/
export declare type DeepPartial<T> = T extends Function ? T : T extends Array<infer U> ? DeepPartialArray<U> : T extends object ? DeepPartialObject<T> : T | undefined;
export interface DeepRequiredArray<T> extends Array<DeepRequired<NonNullable<T>>> {
}
export declare type DeepRequiredObject<T> = {
[P in keyof T]-?: DeepRequired<NonNullable<T[P]>>;
};
export interface DeepNonNullableArray<T> extends Array<DeepNonNullable<NonNullable<T>>> {
}
export declare type DeepNonNullableObject<T> = {
[P in keyof T]-?: DeepNonNullable<NonNullable<T[P]>>;
};
export interface DeepPartialArray<T> extends Array<DeepPartial<T>> {
}
export declare type DeepPartialObject<T> = {
[P in keyof T]?: DeepPartial<T[P]>;
};
export interface DeepReadonlyArray<T> extends ReadonlyArray<DeepReadonly<T>> {
}
export declare type DeepReadonlyObject<T> = {
readonly [P in keyof T]: DeepReadonly<T[P]>;
};
/**
* Readonly that works for deeply nested structure
* @example
* // Expect: {
* // readonly first: {
* // readonly second: {
* // readonly name: string;
* // };
* // };
* // }
* type NestedProps = {
* first: {
* second: {
* name: string;
* };
* };
* };
* type ReadonlyNestedProps = DeepReadonly<NestedProps>;
* @category Type
*/
export declare type DeepReadonly<T> = T extends (...args: any[]) => any ? T : T extends any[] ? DeepReadonlyArray<T[number]> : T extends object ? DeepReadonlyObject<T> : T;
/**
* Required that works for deeply nested structure
* @example
* // Expect: {
* // first: {
* // second: {
* // name: string;
* // };
* // };
* // }
* type NestedProps = {
* first?: {
* second?: {
* name?: string;
* };
* };
* };
* type RequiredNestedProps = DeepRequired<NestedProps>;
* @category Type
*/
export declare type DeepRequired<T> = T extends (...args: any[]) => any ? T : T extends any[] ? DeepRequiredArray<T[number]> : T extends object ? DeepRequiredObject<T> : T;
//# sourceMappingURL=types.d.ts.map