import BigNumber from 'bignumber.js' export enum Denomination { /** * values for asset amounts in base units (no decimal) */ Base = 'BASE', /** * values of asset amounts (w/ decimal) */ Asset = 'ASSET', } export type Amount = T extends Denomination ? { type: T amount: () => BigNumber plus: (value: BigNumber.Value | Amount, decimal?: number) => Amount minus: (value: BigNumber.Value | Amount, decimal?: number) => Amount times: (value: BigNumber.Value | Amount, decimal?: number) => Amount div: (value: BigNumber.Value | Amount, decimal?: number) => Amount gt: (value: BigNumber.Value | Amount) => boolean gte: (value: BigNumber.Value | Amount) => boolean lt: (value: BigNumber.Value | Amount) => boolean lte: (value: BigNumber.Value | Amount) => boolean eq: (value: BigNumber.Value | Amount) => boolean decimal: number } : never export type BaseAmount = Amount export type AssetAmount = Amount