import { TestedType } from "./misc";
/**
* Type `true` if {@typeparam A} is a subtype of {@typeparam B};
* otherwise type `false`.
*
* @see [[`IsEqual`]] for a bidirectional variant.
* @see [[`RequireSubType`]] for a stricter variant.
*/
export declare type IsSubType = A extends B ? true : false;
/**
* Type {@typeparam A} if {@typeparam A} is a subtype of {@typeparam B};
* otherwise type `never`.
*/
export declare type SubType = TestedType>;
/**
* A stricter version of [[`IsSubType`]].
* Type `true` if {@typeparam A} is a subtype of {@typeparam B};
* compile-time error otherwise.
*/
export declare type RequireSubType = IsSubType;
/**
* Type `true` if {@typeparam A} :< {@typeparam B} && {@typeparam B} :< {@typeparam A}
*
* @see [[`IsSubType`]] for a unidirectional variant.
* @see [[`RequireEqual`]] for a stricter variant.
*/
export declare type IsEqual = IsSubType & IsSubType>;
/**
* Requires {@typeparam C} :< [[`IsSubType`]]``;
* otherwise issues a compile-time error.
* Has value equal to `IsSubType`.
*
* @warn
* Misbehaves for ``:
* errors out though it should be valid.
* This is a false negative, and the only one I can find.
* I conjecture there are no false positives.
*/
export declare type RequireEqual> = IsEqual;