to-words
Version:
Convert numbers to words in 132 locales with currency, ordinal, and BigInt support (TypeScript, ESM/CJS/UMD).
109 lines (108 loc) • 2.93 kB
TypeScript
export interface CurrencyOptions {
name: string;
plural: string;
symbol: string;
singular?: string;
precision?: number;
numberSpecificForms?: Record<number, string>;
fractionalUnit: {
name: string;
plural: string;
singular?: string;
numberSpecificForms?: Record<number, string>;
symbol: string;
};
}
export type ConverterOptions = {
currency?: boolean;
ignoreDecimal?: boolean;
ignoreZeroCurrency?: boolean;
doNotAddOnly?: boolean;
includeZeroFractional?: boolean;
currencyOptions?: CurrencyOptions;
gender?: 'masculine' | 'feminine';
useAnd?: boolean;
formal?: boolean;
decimalStyle?: 'digit' | 'fraction';
};
export type OrdinalOptions = {
gender?: 'masculine' | 'feminine';
formal?: boolean;
};
export type ToWordsOptions = {
localeCode?: string;
converterOptions?: ConverterOptions;
};
export interface ConstructorOf<T> {
new (...args: unknown[]): T;
}
export type NumberWordMap = {
number: number | bigint;
value: string | [string, string];
singularValue?: string;
feminineValue?: string;
masculineValue?: string;
};
export type OrdinalWordMap = {
number: number | bigint;
value: string;
};
export type NumberInput = number | bigint | string;
export type PluralFormsMapping = {
[scaleNumber: number]: {
dual?: string;
paucal?: string;
plural?: string;
};
};
export type PaucalConfig = {
min: number;
max: number;
};
export type LocaleConfig = {
currency: CurrencyOptions;
texts: {
and: string;
minus: string;
only: string;
point: string;
};
numberWordsMapping: NumberWordMap[];
exactWordsMapping?: NumberWordMap[];
ordinalWordsMapping?: OrdinalWordMap[];
ordinalSuffix?: string;
ordinalPrefix?: string;
ordinalExactWordsMapping?: OrdinalWordMap[];
namedLessThan1000?: boolean;
scaleFirst?: boolean;
splitWord?: string;
ignoreZeroInDecimals?: boolean;
decimalLengthWordMapping?: Record<number, string>;
fractionDenominatorMapping?: Record<number, {
singular: string;
plural: string;
}>;
fractionSingularRule?: 'slavic';
ignoreOneForWords?: string[];
pluralMark?: string;
pluralWords?: string[];
pluralWordsOnlyWhenTrailing?: string[];
pluralForms?: PluralFormsMapping;
paucalConfig?: PaucalConfig;
noSplitWordAfter?: string[];
onlyInFront?: boolean;
trim?: boolean;
useTrailingForCurrency?: boolean;
formalConfig?: FormalConfig;
};
export interface LocaleInterface {
config: LocaleConfig;
}
export type FormalConfig = {
numberWordsMapping?: NumberWordMap[];
exactWordsMapping?: NumberWordMap[];
ordinalWordsMapping?: OrdinalWordMap[];
ordinalExactWordsMapping?: OrdinalWordMap[];
currency?: CurrencyOptions;
ignoreOneForWords?: string[];
};