system-praktyk-front/src/serialization/types.ts
2020-09-27 22:06:53 +02:00

22 lines
810 B
TypeScript

import { Moment } from "moment";
type Simplify<T> = string |
T extends string ? string :
T extends number ? number :
T extends boolean ? boolean :
T extends Moment ? string :
T extends Array<infer K> ? Array<Simplify<K>> :
T extends (infer K)[] ? Simplify<K>[] :
T extends Object ? Serializable<T> : any;
export type Serializable<T> = { [K in keyof T]: Simplify<T[K]> }
export type Transformer<TFrom, TResult, TContext = never> = {
reverseTransform(subject: TResult, context?: TContext): TFrom;
} & OneWayTransformer<TFrom, TResult, TContext>
export type SerializationTransformer<T, TSerialized = Serializable<T>> = Transformer<T, TSerialized>
export type OneWayTransformer<TFrom, TResult, TContext = never> = {
transform(subject: TFrom, context?: TContext): TResult;
}