Skip to content

parseQuantity

Parses a quantity string into its numeric value

525 bytes
since v12.6.0

Usage

Parse a quantity string like "2 dollars" into its numeric value. You must provide a unit conversion map, with optional short unit aliases.

import * as
import _
_
from 'radashi'
const
const moneyUnits: _.QuantityParser.Options<"cent" | "dollar", "$">
moneyUnits
:
import _
_
.
class QuantityParser<Unit extends string, ShortUnit extends string = never>

Parses a quantity string into its numeric value.

You can use parseQuantity instead for a light wrapper that doesn't require the new keyword.

See

parseQuantity parseQuantity

for more information.

@version12.6.0

QuantityParser
.
type QuantityParser<Unit extends string, ShortUnit extends string = never>.Options<Unit extends string, ShortUnit extends string = never> = {
units: Record<Unit, number>;
short?: Record<ShortUnit, Unit>;
}

The options for a QuantityParser instance.

Options
<'cent' | 'dollar', '$'> = {
units: Record<"cent" | "dollar", number>
units
: {
cent: number
cent
: 1,
dollar: number
dollar
: 100,
},
short?: Record<"$", "cent" | "dollar">
short
: {
$: "cent" | "dollar"
$
: 'dollar',
},
} as
type const = {
readonly units: {
readonly cent: 1;
readonly dollar: 100;
};
readonly short: {
readonly $: "dollar";
};
}
const
import _
_
.
function parseQuantity<"cent" | "dollar", "$">(quantity: _.QuantityString<"cent" | "dollar", "$">, options: _.QuantityParser<Unit extends string, ShortUnit extends string = never>.Options<"cent" | "dollar", "$">): number

Parse a quantity string into its numeric value. You must provide a unit conversion map.

Note that

parseDuration parseDuration

also exists, which can be used to parse duration strings (like 1d or 1 day).

parseQuantity
('1 cent',
const moneyUnits: _.QuantityParser.Options<"cent" | "dollar", "$">
moneyUnits
)
// => 1
import _
_
.
function parseQuantity<"cent" | "dollar", "$">(quantity: _.QuantityString<"cent" | "dollar", "$">, options: _.QuantityParser<Unit extends string, ShortUnit extends string = never>.Options<"cent" | "dollar", "$">): number

Parse a quantity string into its numeric value. You must provide a unit conversion map.

Note that

parseDuration parseDuration

also exists, which can be used to parse duration strings (like 1d or 1 day).

parseQuantity
('2 dollars',
const moneyUnits: _.QuantityParser.Options<"cent" | "dollar", "$">
moneyUnits
)
// => 200
import _
_
.
function parseQuantity<"cent" | "dollar", "$">(quantity: _.QuantityString<"cent" | "dollar", "$">, options: _.QuantityParser<Unit extends string, ShortUnit extends string = never>.Options<"cent" | "dollar", "$">): number

Parse a quantity string into its numeric value. You must provide a unit conversion map.

Note that

parseDuration parseDuration

also exists, which can be used to parse duration strings (like 1d or 1 day).

parseQuantity
('5$',
const moneyUnits: _.QuantityParser.Options<"cent" | "dollar", "$">
moneyUnits
)
// => 500

You may use the QuantityParser class instead, which is more efficient for repeated parsing.

const
const moneyParser: _.QuantityParser<"cent" | "dollar", "$">
moneyParser
= new
import _
_
.
constructor QuantityParser<"cent" | "dollar", "$">({ units, short }: _.QuantityParser<Unit extends string, ShortUnit extends string = never>.Options<"cent" | "dollar", "$">): _.QuantityParser<"cent" | "dollar", "$">

Parses a quantity string into its numeric value.

You can use parseQuantity instead for a light wrapper that doesn't require the new keyword.

See

parseQuantity parseQuantity

for more information.

@version12.6.0

QuantityParser
(
const moneyUnits: _.QuantityParser.Options<"cent" | "dollar", "$">
moneyUnits
)

If you specifically need to parse a duration (e.g. “1 hour”, “2 seconds”) into milliseconds, you can use the parseDuration function instead.

Subclassing

You can subclass QuantityParser to create a parser for a specific unit.

import {
class QuantityParser<Unit extends string, ShortUnit extends string = never>

Parses a quantity string into its numeric value.

You can use parseQuantity instead for a light wrapper that doesn't require the new keyword.

See

parseQuantity parseQuantity

for more information.

@version12.6.0

QuantityParser
, type
type QuantityString<Unit extends string, ShortUnit extends string = never> = `1 ${Unit}` | `${number} ${Unit}s` | `${number}${ShortUnit}`

A human-readable quantity string.

QuantityString
} from 'radashi'
export type
type DistanceUnit = "kilometer" | "mile" | "yard" | "foot" | "meter"
DistanceUnit
= keyof typeof
class DistanceParser
DistanceParser
.
DistanceParser.units: {
readonly kilometer: 1000;
readonly mile: 1852;
readonly yard: 0.9144;
readonly foot: 0.3048;
readonly meter: 1;
}
units
export type
type DistanceShortUnit = "km" | "mi" | "yd" | "ft" | "m"
DistanceShortUnit
= keyof typeof
class DistanceParser
DistanceParser
.
DistanceParser.shortUnits: {
readonly km: "kilometer";
readonly mi: "mile";
readonly yd: "yard";
readonly ft: "foot";
readonly m: "meter";
}
shortUnits
export type
type DistanceString = "1 kilometer" | "1 mile" | "1 yard" | "1 foot" | "1 meter" | `${number} kilometers` | `${number} miles` | `${number} yards` | `${number} foots` | `${number} meters` | `${number}km` | `${number}mi` | `${number}yd` | `${number}ft` | `${number}m`
DistanceString
=
type QuantityString<Unit extends string, ShortUnit extends string = never> = `1 ${Unit}` | `${number} ${Unit}s` | `${number}${ShortUnit}`

A human-readable quantity string.

QuantityString
<
type DistanceUnit = "kilometer" | "mile" | "yard" | "foot" | "meter"
DistanceUnit
,
type DistanceShortUnit = "km" | "mi" | "yd" | "ft" | "m"
DistanceShortUnit
>
export class
class DistanceParser
DistanceParser
extends
class QuantityParser<Unit extends string, ShortUnit extends string = never>

Parses a quantity string into its numeric value.

You can use parseQuantity instead for a light wrapper that doesn't require the new keyword.

See

parseQuantity parseQuantity

for more information.

@version12.6.0

QuantityParser
<
type DistanceUnit = "kilometer" | "mile" | "yard" | "foot" | "meter"
DistanceUnit
,
type DistanceShortUnit = "km" | "mi" | "yd" | "ft" | "m"
DistanceShortUnit
> {
constructor() {
super({
units: Record<"kilometer" | "mile" | "yard" | "foot" | "meter", number>
units
:
class DistanceParser
DistanceParser
.
DistanceParser.units: {
readonly kilometer: 1000;
readonly mile: 1852;
readonly yard: 0.9144;
readonly foot: 0.3048;
readonly meter: 1;
}
units
,
short?: Record<"km" | "mi" | "yd" | "ft" | "m", "kilometer" | "mile" | "yard" | "foot" | "meter">
short
:
class DistanceParser
DistanceParser
.
DistanceParser.shortUnits: {
readonly km: "kilometer";
readonly mi: "mile";
readonly yd: "yard";
readonly ft: "foot";
readonly m: "meter";
}
shortUnits
,
})
}
static
DistanceParser.units: {
readonly kilometer: 1000;
readonly mile: 1852;
readonly yard: 0.9144;
readonly foot: 0.3048;
readonly meter: 1;
}
units
= {
kilometer: 1000
kilometer
: 1_000,
mile: 1852
mile
: 1_852,
yard: 0.9144
yard
: 0.9144,
foot: 0.3048
foot
: 0.3048,
meter: 1
meter
: 1,
} as
type const = {
readonly kilometer: 1000;
readonly mile: 1852;
readonly yard: 0.9144;
readonly foot: 0.3048;
readonly meter: 1;
}
const
static
DistanceParser.shortUnits: {
readonly km: "kilometer";
readonly mi: "mile";
readonly yd: "yard";
readonly ft: "foot";
readonly m: "meter";
}
shortUnits
= {
km: "kilometer"
km
: 'kilometer',
mi: "mile"
mi
: 'mile',
yd: "yard"
yd
: 'yard',
ft: "foot"
ft
: 'foot',
m: "meter"
m
: 'meter',
} as
type const = {
readonly km: "kilometer";
readonly mi: "mile";
readonly yd: "yard";
readonly ft: "foot";
readonly m: "meter";
}
const
}
// Usage
const
const distanceParser: DistanceParser
distanceParser
= new
constructor DistanceParser(): DistanceParser
DistanceParser
()
const distanceParser: DistanceParser
distanceParser
.
QuantityParser<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">.parse(quantity: QuantityString<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">): number

Parse a quantity string into its numeric value

@throws{Error} If the quantity string is invalid or contains an unknown unit

parse
('1 kilometer') // => 1_000
const distanceParser: DistanceParser
distanceParser
.
QuantityParser<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">.parse(quantity: QuantityString<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">): number

Parse a quantity string into its numeric value

@throws{Error} If the quantity string is invalid or contains an unknown unit

parse
('1km') // => 1_000
const distanceParser: DistanceParser
distanceParser
.
QuantityParser<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">.parse(quantity: QuantityString<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">): number

Parse a quantity string into its numeric value

@throws{Error} If the quantity string is invalid or contains an unknown unit

parse
('1 mile') // => 1_852
const distanceParser: DistanceParser
distanceParser
.
QuantityParser<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">.parse(quantity: QuantityString<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">): number

Parse a quantity string into its numeric value

@throws{Error} If the quantity string is invalid or contains an unknown unit

parse
('1mi') // => 1_852
const distanceParser: DistanceParser
distanceParser
.
QuantityParser<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">.parse(quantity: QuantityString<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">): number

Parse a quantity string into its numeric value

@throws{Error} If the quantity string is invalid or contains an unknown unit

parse
('1 yard') // => 0.9144
const distanceParser: DistanceParser
distanceParser
.
QuantityParser<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">.parse(quantity: QuantityString<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">): number

Parse a quantity string into its numeric value

@throws{Error} If the quantity string is invalid or contains an unknown unit

parse
('1yd') // => 0.9144
const distanceParser: DistanceParser
distanceParser
.
QuantityParser<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">.parse(quantity: QuantityString<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">): number

Parse a quantity string into its numeric value

@throws{Error} If the quantity string is invalid or contains an unknown unit

parse
('1 foot') // => 0.3048
const distanceParser: DistanceParser
distanceParser
.
QuantityParser<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">.parse(quantity: QuantityString<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">): number

Parse a quantity string into its numeric value

@throws{Error} If the quantity string is invalid or contains an unknown unit

parse
('1ft') // => 0.3048
const distanceParser: DistanceParser
distanceParser
.
QuantityParser<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">.parse(quantity: QuantityString<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">): number

Parse a quantity string into its numeric value

@throws{Error} If the quantity string is invalid or contains an unknown unit

parse
('1 meter') // => 1

You may want to create a wrapper function to make it easier to use.

const
const parser: DistanceParser
parser
= new
constructor DistanceParser(): DistanceParser
DistanceParser
()
export function
function parseDistance(input: DistanceString): number
parseDistance
(
input: DistanceString
input
:
type DistanceString = "1 kilometer" | "1 mile" | "1 yard" | "1 foot" | "1 meter" | `${number} kilometers` | `${number} miles` | `${number} yards` | `${number} foots` | `${number} meters` | `${number}km` | `${number}mi` | `${number}yd` | `${number}ft` | `${number}m`
DistanceString
): number {
return
const parser: DistanceParser
parser
.
QuantityParser<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">.parse(quantity: QuantityString<"kilometer" | "mile" | "yard" | "foot" | "meter", "km" | "mi" | "yd" | "ft" | "m">): number

Parse a quantity string into its numeric value

@throws{Error} If the quantity string is invalid or contains an unknown unit

parse
(
input: DistanceString
input
)
}
// Usage
function parseDistance(input: DistanceString): number
parseDistance
('1 kilometer') // => 1_000
function parseDistance(input: DistanceString): number
parseDistance
('1km') // => 1_000
function parseDistance(input: DistanceString): number
parseDistance
('1 mile') // => 1_852