system-praktyk-front/src/serialization/types.ts
2020-08-04 20:21:32 +02:00

19 lines
635 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> = {
transform(subject: TFrom): TResult;
reverseTransform(subject: TResult): TFrom;
}
export type SerializationTransformer<T, TSerialized = Serializable<T>> = Transformer<T, TSerialized>