decode-it
Version:
a simple zero-dependency type safe json decoder for typescript
24 lines (23 loc) • 944 B
TypeScript
export declare type AnyElementOf<T extends any[]> = T[number];
export declare type NonEmptyArray<T> = [T, ...T[]];
export declare type ArrayTwoOrMore<T> = T[] & {
0: T;
1: T;
};
export declare type UndefinedProperties<T> = {
[P in keyof T]-?: undefined extends T[P] ? P : never;
}[keyof T];
declare type UndefinedKeys<T> = {
[P in keyof T]: undefined extends T[P] ? P : never;
}[keyof T];
export declare type OptionalUndefined<T> = Omit<T, UndefinedKeys<T>> & Partial<Pick<T, UndefinedKeys<T>>>;
export declare type Id<T> = {
[P in keyof T]: T[P];
};
declare type Try<T, T2, N> = T extends T2 ? T : N;
declare type Narrowable = boolean | number | string | null;
declare type _Narrow<T> = (T extends [] ? [] : never) | (T extends Narrowable ? T : never) | {
[key in keyof T]: T[key] extends (...args: unknown[]) => unknown ? T[key] : _Narrow<T[key]>;
};
export declare type Narrow<T> = Try<T, [], _Narrow<T>>;
export {};