UNPKG

@yaser2us/json-api-nestjs-shared

Version:

Shared Helper for JsonApi Plugin for NestJs

20 lines (19 loc) 1.03 kB
import { Any } from 'ts-toolbelt'; export type HasId<T, IdKey extends string> = Any.At<T, IdKey> extends undefined ? 0 : 1; export type CastIteratorType<T> = T extends { [Symbol.iterator](): Iterator<infer U>; } ? U : T; type RelationCheck<T, IdKey extends string> = T extends never ? 0 : T extends Promise<infer U> ? HasId<U, IdKey> : HasId<CastIteratorType<T>, IdKey>; export type RelationKeys<E, IdKey extends string = 'id'> = { [K in keyof E]: Exclude<E[K], null> extends never ? never : RelationCheck<Exclude<E[K], null>, IdKey> extends 1 ? K : never; }[keyof E]; export type PropertyKeys<E, IdKey extends string = 'id'> = keyof Omit<E, RelationKeys<E, IdKey>>; export type IsIterator<T> = T extends { [Symbol.iterator](): Iterator<any>; } ? 1 : 0; export type TypeOfArray<T> = T extends (infer U)[] ? U : T; export type ValueOf<T> = T[keyof T]; export type Constructor<T> = new (...args: any[]) => T; export type AnyEntity<T = object> = T; export type EntityClass<T extends AnyEntity> = Constructor<T>; export {};