type Type = Type.Any | Type.AnyValue | Type.Variable | Type.Value | Type.Container | Type.Union | Type.OneOf; declare namespace Type { interface Any { kind: 'any'; '@type': any; } interface Variable { kind: 'variable'; name: string; type: Type; isConstraint: boolean; '@type': any; } interface AnyValue { kind: 'any-value'; '@type': any; } interface Value { kind: 'value'; namespace: string; name: string; parent?: Value; '@type': T; } interface Container { kind: 'container'; namespace: string; name: string; alias?: string; child: Type; '@type': T; } interface Union { kind: 'union'; types: Type[]; '@type': T; } interface OneOf { kind: 'oneof'; type: Value; namespace: string; name: string; values: { [v: string]: boolean | undefined; }; '@type': T; } function Variable(name: string, type: Type, isConstraint?: boolean): Variable; function Value(namespace: string, name: string, parent?: Value): Value; function Container(namespace: string, name: string, child: Type, alias?: string): Container; function Union(types: Type[]): Union; function OneOf(namespace: string, name: string, type: Value, values: any[]): OneOf; const Any: Any; const AnyValue: AnyValue; const Num: Value; const Str: Value; const Bool: OneOf; function oneOfValues({ values }: OneOf): string[]; } export { Type };