import { isArray, isBoolean, isNumber, isObject, isString } from '../types/Is'; import { Optional } from '../types/Types'; import { Construct, ofConstruct } from '../types/Constructor'; export function ifType(o: unknown, predicate: (o: unknown) => o is T, f: Construct, alt: Construct): Out; export function ifType(o: unknown, predicate: (o: unknown) => o is T, f: Construct, alt?: Construct): Optional; export function ifType(o: unknown, predicate: (o: unknown) => o is T, f: Construct, alt?: Construct): Optional { return predicate(o) ? ofConstruct(f, o) : ofConstruct(alt); } export function ifString(o: unknown, f: Construct, alt: Construct): Out; export function ifString(o: unknown, f: Construct, alt?: Construct): Optional; export function ifString(o: unknown, f: Construct, alt?: Construct): Optional { return ifType(o, isString, f, alt); } export function ifNumber(o: unknown, f: Construct, alt: Construct): Out; export function ifNumber(o: unknown, f: Construct, alt?: Construct): Optional; export function ifNumber(o: unknown, f: Construct, alt?: Construct): Optional { return ifType(o, isNumber, f, alt); } export function ifBoolean(o: unknown, f: Construct, alt: Construct): Out; export function ifBoolean(o: unknown, f: Construct, alt?: Construct): Optional; export function ifBoolean(o: unknown, f: Construct, alt?: Construct): Optional { return ifType(o, isBoolean, f, alt); } export function ifArray(o: unknown, f: Construct, alt: Construct): Out; export function ifArray(o: unknown, f: Construct, alt?: Construct): Optional; export function ifArray(o: unknown, f: Construct, alt?: Construct): Optional { return ifType(o, isArray, f, alt); } export function ifObject(o: unknown, f: Construct>, alt: Construct): Out; export function ifObject(o: unknown, f: Construct>, alt?: Construct): Optional; export function ifObject(o: unknown, f: Construct>, alt?: Construct): Optional { return ifType(o, isObject, f, alt); }