UNPKG

@fractorysolutions/safe-units

Version:
18 lines (17 loc) 1.17 kB
import { AddExponents } from "./generated/addition"; import { DivideExponents } from "./generated/division"; import { Exponent, MinExponent } from "./generated/exponent"; import { MultiplyExponents } from "./generated/multiplication"; export type PositiveExponent = Exclude<NonNegativeExponent, "0">; type NonNegativeExponent = SubtractExponents<Exponent, MinExponent>; export type SubtractExponents<L extends Exponent, R extends Exponent> = AddExponents<L, Negative<R>>; /** Exponents that can be added to N without producing an error. */ export type AddendOf<N extends Exponent> = SubtractExponents<AddExponents<Exponent, N>, N>; /** Exponents that can be subtracted from N without producing an error. */ export type SubtrahendOf<N extends Exponent> = AddendOf<Negative<N>>; /** Exponents that can be multiplied with N without producing an error. */ export type MultiplicandOf<N extends Exponent> = "0" extends N ? Exponent : DivideExponents<Exponent, ProductOf<N>>; /** Exponents that are non-error multiples of N. */ export type ProductOf<N extends Exponent> = MultiplyExponents<Exponent, N>; type Negative<N extends Exponent> = MultiplyExponents<N, "-1">; export {};