export interface Matchable { matches(options: T): boolean } export function minIdx(a: number, b: number): number { if (a === -1) return b if (b === -1) return a return Math.min(a, b) } export function knownValuesValidator(values: Iterable) { const set = new Set(values) return (value: unknown): value is T => set.has(value) } export function isNonNullable(value: T): value is NonNullable { return value != null }