import { useTypes } from 'over.ts/src/index.js'; const types = { number: (x: unknown): x is number => typeof x === 'number', bigint: (x: unknown): x is bigint => typeof x === 'bigint' } const overload = useTypes(types) const negate = overload({ 'number -> number': (a: number): number => { console.log('Negating number', a) return -a }, 'bigint -> bigint': (a: bigint): bigint => { console.log('Negating bigint', a) return -a } }) console.log('Negation of 5 is', negate(5)) console.log('Negation of 5n is', negate(5n)) const add = overload({ 'number, number -> number': (a: number, b: number): number => { console.log('Adding numbers', a, b) return a+b }, 'bigint, bigint -> bigint': (a: bigint, b: bigint): bigint => { console.log('Adding bigints', a, b) return a+b } }) console.log('Sum of 5 and 7 is', add(5,7)) console.log('Sum of 5n and 7n is', add(5n, 7n)) try { //@ts-expect-error console.log('Mixed sum is', add(5n, 7)) } catch { console.log('Mixed sum errored as expected.') }