gqty
Version:
The No-GraphQL Client for TypeScript
22 lines (21 loc) • 1.11 kB
TypeScript
export type NotUndefined<T> = T extends undefined ? never : T;
/**
* Remove all possible 'undefined' values recursively from an object
*/
export type NotSkeletonDeep<T> = T extends Array<unknown> ? Array<NotUndefined<NotSkeletonDeep<T[number]>>> : T extends (...args: unknown[]) => unknown ? (...args: Parameters<T>) => NotSkeletonDeep<NotUndefined<ReturnType<T>>> : T extends object ? {
[P in keyof T]: NotUndefined<NotSkeletonDeep<T[P]>>;
} : NotUndefined<T>;
/**
* Remove all possible 'undefined' types in the first level.
*/
export type NotSkeleton<T> = T extends Array<unknown> ? Array<NotSkeleton<T[number]>> : T extends (...args: unknown[]) => unknown ? (...args: Parameters<T>) => NotUndefined<ReturnType<T>> : T extends object ? {
[P in keyof T]: NotUndefined<T[P]>;
} : NotUndefined<T>;
/**
* Runtime no-op that removes all the undefined types recursively
*/
export declare const castNotSkeletonDeep: <T>(v: T) => NotSkeletonDeep<T>;
/**
* Runtime no-op that removes all the undefined types in the first level
*/
export declare const castNotSkeleton: <T>(v: T) => NotSkeleton<T>;