typomath/src/steps/one.ts

44 lines
1.1 KiB
TypeScript

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.')
}