@rimbu/common
Version:
Common types and objects used in many other Rimbu packages
32 lines (31 loc) • 933 B
text/typescript
/**
* Accepts all types of T and U where T extends U,
* and result in the upper bound U.
*/
export type SuperOf<U, T> = T extends U ? U : never;
/**
* Accepts all types of T and S where S extends T,
* and results in the lower bound S.
*/
export type SubOf<S, T> = S extends T ? S : never;
/**
* Accepts all types of T and U where T extends U or U extends T.
*/
export type RelatedTo<T, U> = T | SuperOf<U, T>;
/**
* Accepts all arrays with at least one element.
*/
export type ArrayNonEmpty<T> = [T, ...T[]];
/**
* Accepts all strings with at least one character.
*/
export type StringNonEmpty<T> = T extends string ? '' extends T ? never : T : never;
/**
* Utility type to convert some object to a JSON serializable format.
* @typeparam V - the `value` type
* @typeparam D - the `dataType` tag string type
*/
export interface ToJSON<V, D extends string = string> {
readonly dataType: D;
readonly value: V;
}