declare namespace Types {
    type One = string;
    type OneNullable = One | null;
    type Array = One[];
    type ArrayNullable = Array | null;
}
declare namespace String {
    type AssertsTemplate<R> = {
        string(value: unknown, message?: string): asserts value is R;
    };
    type ValueIsTemplate<R> = {
        string(value: unknown): value is R;
    };
}
declare namespace EmptyString {
    type AssertsTemplate<R> = {
        emptyString(value: unknown, message?: string): asserts value is R;
    };
    type ValueIsTemplate<R> = {
        emptyString(value: unknown): value is R;
    };
}
declare namespace Contains {
    type AssertsTemplate<R> = {
        contains(value: unknown, subString: string, message?: string): asserts value is R;
    };
    type ValueIsTemplate<R> = {
        contains(value: unknown, subString: string): value is R;
    };
}
declare namespace StartsWith {
    type AssertsTemplate<R> = {
        startsWith(value: unknown, prefix: string, message?: string): asserts value is R;
    };
    type ValueIsTemplate<R> = {
        startsWith(value: unknown, prefix: string): value is R;
    };
}
declare namespace EndsWith {
    type AssertsTemplate<R> = {
        endsWith(value: unknown, suffix: string, message?: string): asserts value is R;
    };
    type ValueIsTemplate<R> = {
        endsWith(value: unknown, suffix: string): value is R;
    };
}
declare namespace OneOf {
    namespace Asserts {
        type One = {
            oneOf<T extends string>(value: unknown, values: T[], message?: string): asserts value is T;
        };
        type OneNullable = {
            oneOf<T extends string>(value: unknown, values: T[], message?: string): asserts value is T | null;
        };
        type Array = {
            oneOf<T extends string>(value: unknown, values: T[], message?: string): asserts value is T[];
        };
        type ArrayNullable = {
            oneOf<T extends string>(value: unknown, values: T[], message?: string): asserts value is T[] | null;
        };
        type Not = {
            oneOf<T extends string>(value: unknown, values: T[], message?: string): void;
        };
    }
    namespace ValueIs {
        type One = {
            oneOf<T extends (string | number)>(value: unknown, values: T[]): value is T;
        };
        type OneNullable = {
            oneOf<T extends (string | number)>(value: unknown, values: T[]): value is T | null;
        };
        type Array = {
            oneOf<T extends (string | number)>(value: unknown, values: T[]): value is T[];
        };
        type ArrayNullable = {
            oneOf<T extends (string | number)>(value: unknown, values: T[]): value is T[] | null;
        };
        type Not = {
            oneOf<T extends (string | number)>(value: unknown, values: T[]): value is boolean;
        };
    }
}
export declare namespace StringFunctions {
    namespace Asserts {
        type One = String.AssertsTemplate<Types.One> & EmptyString.AssertsTemplate<Types.One> & Contains.AssertsTemplate<Types.One> & StartsWith.AssertsTemplate<Types.One> & EndsWith.AssertsTemplate<Types.One> & OneOf.Asserts.One;
        type OneNullable = String.AssertsTemplate<Types.OneNullable> & EmptyString.AssertsTemplate<Types.OneNullable> & Contains.AssertsTemplate<Types.OneNullable> & StartsWith.AssertsTemplate<Types.OneNullable> & EndsWith.AssertsTemplate<Types.OneNullable> & OneOf.Asserts.OneNullable;
        type Array = String.AssertsTemplate<Types.Array> & EmptyString.AssertsTemplate<Types.Array> & Contains.AssertsTemplate<Types.Array> & StartsWith.AssertsTemplate<Types.Array> & EndsWith.AssertsTemplate<Types.Array> & OneOf.Asserts.Array;
        type ArrayNullable = String.AssertsTemplate<Types.ArrayNullable> & EmptyString.AssertsTemplate<Types.ArrayNullable> & Contains.AssertsTemplate<Types.ArrayNullable> & StartsWith.AssertsTemplate<Types.ArrayNullable> & EndsWith.AssertsTemplate<Types.ArrayNullable> & OneOf.Asserts.ArrayNullable;
        type Not = EmptyString.AssertsTemplate<Types.One> & Contains.AssertsTemplate<Types.One> & StartsWith.AssertsTemplate<Types.One> & EndsWith.AssertsTemplate<Types.One> & OneOf.Asserts.Not;
    }
    namespace ValueIs {
        type One = String.ValueIsTemplate<Types.One> & EmptyString.ValueIsTemplate<Types.One> & Contains.ValueIsTemplate<Types.One> & StartsWith.ValueIsTemplate<Types.One> & EndsWith.ValueIsTemplate<Types.One> & OneOf.ValueIs.One;
        type OneNullable = String.ValueIsTemplate<Types.OneNullable> & EmptyString.ValueIsTemplate<Types.OneNullable> & Contains.ValueIsTemplate<Types.OneNullable> & StartsWith.ValueIsTemplate<Types.OneNullable> & EndsWith.ValueIsTemplate<Types.OneNullable> & OneOf.ValueIs.OneNullable;
        type Array = String.ValueIsTemplate<Types.Array> & EmptyString.ValueIsTemplate<Types.Array> & Contains.ValueIsTemplate<Types.Array> & StartsWith.ValueIsTemplate<Types.Array> & EndsWith.ValueIsTemplate<Types.Array> & OneOf.ValueIs.Array;
        type ArrayNullable = String.ValueIsTemplate<Types.ArrayNullable> & EmptyString.ValueIsTemplate<Types.ArrayNullable> & Contains.ValueIsTemplate<Types.ArrayNullable> & StartsWith.ValueIsTemplate<Types.ArrayNullable> & EndsWith.ValueIsTemplate<Types.ArrayNullable> & OneOf.ValueIs.ArrayNullable;
        type Not = EmptyString.ValueIsTemplate<Types.One> & Contains.ValueIsTemplate<Types.One> & StartsWith.ValueIsTemplate<Types.One> & EndsWith.ValueIsTemplate<Types.One> & OneOf.ValueIs.Not;
    }
}
export {};
