Skip to content

parseQuantity

将数量字符串解析为其数值

525 bytes
since v12.6.0

使用方法

将数量字符串如 "2 dollars" 解析为其数值。您必须提供单位转换映射,可选择提供短单位别名。

import * as _ from "radashi";
const moneyUnits = {
units: {
cent: 1,
dollar: 100,
},
short: {
$: "dollar",
},
} as const;
_.parseQuantity("1 cent", moneyUnits);
// => 1
_.parseQuantity("2 dollars", moneyUnits);
// => 200
_.parseQuantity("5$", moneyUnits);
// => 500

您可以改用 QuantityParser 类,它对于重复解析更高效。

const moneyParser = new _.QuantityParser(moneyUnits);

如果您特别需要将持续时间(如”1 hour”,“2 seconds”)解析为毫秒,可以改用 parseDuration 函数。

子类化

您可以子类化 QuantityParser 来为特定单位创建解析器。

import { QuantityParser, type QuantityString } from 'radashi'
export type DistanceUnit = keyof typeof DistanceParser.units
export type DistanceShortUnit = keyof typeof DistanceParser.shortUnits
export type DistanceString = QuantityString<DistanceUnit, DistanceShortUnit>
export class DistanceParser extends QuantityParser<DistanceUnit, DistanceShortUnit> {
constructor() {
super({
units: DistanceParser.units,
short: DistanceParser.shortUnits,
})
}
static units = {
kilometer: 1_000,
mile: 1_852,
yard: 0.9144,
foot: 0.3048,
meter: 1,
} as const
static shortUnits = {
km: 'kilometer',
mi: 'mile',
yd: 'yard',
ft: 'foot',
m: 'meter',
} as const
})
// 使用方法
const distanceParser = new DistanceParser()
distanceParser.parse('1 kilometer') // => 1_000
distanceParser.parse('1km') // => 1_000
distanceParser.parse('1 mile') // => 1_852
distanceParser.parse('1mi') // => 1_852
distanceParser.parse('1 yard') // => 0.9144
distanceParser.parse('1yd') // => 0.9144
distanceParser.parse('1 foot') // => 0.3048
distanceParser.parse('1ft') // => 0.3048
distanceParser.parse('1 meter') // => 1

您可能想要创建一个包装函数以便更容易使用。

import { DistanceParser, type DistanceString } from "./DistanceParser";
const parser = new DistanceParser();
export function parseDistance(input: DistanceString): number {
return parser.parse(input);
}
// 使用方法
parseDistance("1 kilometer"); // => 1_000
parseDistance("1km"); // => 1_000
parseDistance("1 mile"); // => 1_852