import { Type } from './reflection-type'; export declare function intersectMap(a: Map, b: Map): Map; export declare function getTags(type: Type): Map; export interface TypeTags { /** type definition*/ type: Type; /** possible type tags with values from the type */ tags: Map; } export interface Differentator { /** property key that is used for discriminating the types*/ key: string; /** map from object[key] values to type definitions */ map: Map; } export declare function differentator(types: TypeTags[]): Differentator | null; export interface UnionDiscriminator { /** map from type tag prop values to types * if there is no best discriminator property return null * and return all types in the undiscriminated list * */ discriminator: Differentator | null; /** non discriminated types */ undiscriminated: Type[]; } export declare function discriminateUnion(types: Type[]): UnionDiscriminator;