@fractorysolutions/safe-units
Version:
Type-safe TypeScript units of measure
29 lines (23 loc) • 848 B
text/typescript
import { Exponent } from "./generated/exponent";
export function getExponentValue(value: Exponent): number {
return parseInt(value, 10);
}
export const negateExponent = (value: Exponent) =>
toExponent(-getExponentValue(value));
export const addExponents = wrapBinaryExponentFn((left, right) => left + right);
export const multiplyExponents = wrapBinaryExponentFn(
(left, right) => left * right,
);
export const divideExponents = wrapBinaryExponentFn(
(left, right) => left / right,
);
type BinaryExponentFn = (left: Exponent, right: Exponent) => Exponent;
function wrapBinaryExponentFn(
fn: (left: number, right: number) => number,
): BinaryExponentFn {
return (left, right) =>
toExponent(fn(getExponentValue(left), getExponentValue(right)));
}
function toExponent(value: number): Exponent {
return `${value}` as Exponent;
}