Skip to content

Commit 877d9d3

Browse files
authored
Intl.NumberFormat: Add latest options, fix previous library discrepancies (#56902)
1 parent 3964aa1 commit 877d9d3

File tree

78 files changed

+1053
-410
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+1053
-410
lines changed

src/compiler/commandLineParser.ts

+1
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ const libEntries: [string, string][] = [
217217
["es2022.regexp", "lib.es2022.regexp.d.ts"],
218218
["es2023.array", "lib.es2023.array.d.ts"],
219219
["es2023.collection", "lib.es2023.collection.d.ts"],
220+
["es2023.intl", "lib.es2023.intl.d.ts"],
220221
["esnext.array", "lib.es2023.array.d.ts"],
221222
["esnext.collection", "lib.esnext.collection.d.ts"],
222223
["esnext.symbol", "lib.es2019.symbol.d.ts"],

src/lib/es2018.intl.d.ts

+16-4
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,22 @@ declare namespace Intl {
3737

3838
const PluralRules: PluralRulesConstructor;
3939

40-
// We can only have one definition for 'type' in TypeScript, and so you can learn where the keys come from here:
41-
type ES2018NumberFormatPartType = "literal" | "nan" | "infinity" | "percent" | "integer" | "group" | "decimal" | "fraction" | "plusSign" | "minusSign" | "percentSign" | "currency" | "code" | "symbol" | "name";
42-
type ES2020NumberFormatPartType = "compact" | "exponentInteger" | "exponentMinusSign" | "exponentSeparator" | "unit" | "unknown";
43-
type NumberFormatPartTypes = ES2018NumberFormatPartType | ES2020NumberFormatPartType;
40+
interface NumberFormatPartTypeRegistry {
41+
literal: never;
42+
nan: never;
43+
infinity: never;
44+
percent: never;
45+
integer: never;
46+
group: never;
47+
decimal: never;
48+
fraction: never;
49+
plusSign: never;
50+
minusSign: never;
51+
percentSign: never;
52+
currency: never;
53+
}
54+
55+
type NumberFormatPartTypes = keyof NumberFormatPartTypeRegistry;
4456

4557
interface NumberFormatPart {
4658
type: NumberFormatPartTypes;

src/lib/es2019.intl.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
declare namespace Intl {
22
interface DateTimeFormatPartTypesRegistry {
3-
unknown: any;
3+
unknown: never;
44
}
55
}

src/lib/es2020.bigint.d.ts

-1
Original file line numberDiff line numberDiff line change
@@ -705,6 +705,5 @@ interface DataView {
705705
declare namespace Intl {
706706
interface NumberFormat {
707707
format(value: number | bigint): string;
708-
resolvedOptions(): ResolvedNumberFormatOptions;
709708
}
710709
}

src/lib/es2020.intl.d.ts

+32-7
Original file line numberDiff line numberDiff line change
@@ -223,24 +223,49 @@ declare namespace Intl {
223223
): UnicodeBCP47LocaleIdentifier[];
224224
};
225225

226+
interface NumberFormatOptionsStyleRegistry {
227+
unit: never;
228+
}
229+
230+
interface NumberFormatOptionsCurrencyDisplayRegistry {
231+
narrowSymbol: never;
232+
}
233+
234+
interface NumberFormatOptionsSignDisplayRegistry {
235+
auto: never;
236+
never: never;
237+
always: never;
238+
exceptZero: never;
239+
}
240+
241+
type NumberFormatOptionsSignDisplay = keyof NumberFormatOptionsSignDisplayRegistry;
242+
226243
interface NumberFormatOptions {
244+
numberingSystem?: string | undefined;
227245
compactDisplay?: "short" | "long" | undefined;
228246
notation?: "standard" | "scientific" | "engineering" | "compact" | undefined;
229-
signDisplay?: "auto" | "never" | "always" | "exceptZero" | undefined;
247+
signDisplay?: NumberFormatOptionsSignDisplay | undefined;
230248
unit?: string | undefined;
231249
unitDisplay?: "short" | "long" | "narrow" | undefined;
232-
currencyDisplay?: string | undefined;
233-
currencySign?: string | undefined;
250+
currencySign?: "standard" | "accounting" | undefined;
234251
}
235252

236253
interface ResolvedNumberFormatOptions {
237254
compactDisplay?: "short" | "long";
238-
notation?: "standard" | "scientific" | "engineering" | "compact";
239-
signDisplay?: "auto" | "never" | "always" | "exceptZero";
255+
notation: "standard" | "scientific" | "engineering" | "compact";
256+
signDisplay: NumberFormatOptionsSignDisplay;
240257
unit?: string;
241258
unitDisplay?: "short" | "long" | "narrow";
242-
currencyDisplay?: string;
243-
currencySign?: string;
259+
currencySign?: "standard" | "accounting";
260+
}
261+
262+
interface NumberFormatPartTypeRegistry {
263+
compact: never;
264+
exponentInteger: never;
265+
exponentMinusSign: never;
266+
exponentSeparator: never;
267+
unit: never;
268+
unknown: never;
244269
}
245270

246271
interface DateTimeFormatOptions {

src/lib/es2023.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
/// <reference lib="es2022" />
22
/// <reference lib="es2023.array" />
33
/// <reference lib="es2023.collection" />
4+
/// <reference lib="es2023.intl" />

src/lib/es2023.intl.d.ts

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
declare namespace Intl {
2+
interface NumberFormatOptionsUseGroupingRegistry {
3+
min2: never;
4+
auto: never;
5+
always: never;
6+
}
7+
8+
interface NumberFormatOptionsSignDisplayRegistry {
9+
negative: never;
10+
}
11+
12+
interface NumberFormatOptions {
13+
roundingPriority?: "auto" | "morePrecision" | "lessPrecision" | undefined;
14+
roundingIncrement?: 1 | 2 | 5 | 10 | 20 | 25 | 50 | 100 | 200 | 250 | 500 | 1000 | 2000 | 2500 | 5000 | undefined;
15+
roundingMode?: "ceil" | "floor" | "expand" | "trunc" | "halfCeil" | "halfFloor" | "halfExpand" | "halfTrunc" | "halfEven" | undefined;
16+
trailingZeroDisplay?: "auto" | "stripIfInteger" | undefined;
17+
}
18+
19+
interface ResolvedNumberFormatOptions {
20+
roundingPriority: "auto" | "morePrecision" | "lessPrecision";
21+
roundingMode: "ceil" | "floor" | "expand" | "trunc" | "halfCeil" | "halfFloor" | "halfExpand" | "halfTrunc" | "halfEven";
22+
roundingIncrement: 1 | 2 | 5 | 10 | 20 | 25 | 50 | 100 | 200 | 250 | 500 | 1000 | 2000 | 2500 | 5000;
23+
trailingZeroDisplay: "auto" | "stripIfInteger";
24+
}
25+
26+
interface NumberRangeFormatPart extends NumberFormatPart {
27+
source: "startRange" | "endRange" | "shared";
28+
}
29+
30+
interface NumberFormat {
31+
formatRange(start: number | bigint, end: number | bigint): string;
32+
formatRangeToParts(start: number | bigint, end: number | bigint): NumberRangeFormatPart[];
33+
}
34+
}

src/lib/es5.d.ts

+30-8
Original file line numberDiff line numberDiff line change
@@ -4415,12 +4415,33 @@ declare namespace Intl {
44154415

44164416
var Collator: CollatorConstructor;
44174417

4418+
interface NumberFormatOptionsStyleRegistry {
4419+
decimal: never;
4420+
percent: never;
4421+
currency: never;
4422+
}
4423+
4424+
type NumberFormatOptionsStyle = keyof NumberFormatOptionsStyleRegistry;
4425+
4426+
interface NumberFormatOptionsCurrencyDisplayRegistry {
4427+
code: never;
4428+
symbol: never;
4429+
name: never;
4430+
}
4431+
4432+
type NumberFormatOptionsCurrencyDisplay = keyof NumberFormatOptionsCurrencyDisplayRegistry;
4433+
4434+
interface NumberFormatOptionsUseGroupingRegistry {}
4435+
4436+
type NumberFormatOptionsUseGrouping = {} extends NumberFormatOptionsUseGroupingRegistry ? boolean : keyof NumberFormatOptionsUseGroupingRegistry | "true" | "false" | boolean;
4437+
type ResolvedNumberFormatOptionsUseGrouping = {} extends NumberFormatOptionsUseGroupingRegistry ? boolean : keyof NumberFormatOptionsUseGroupingRegistry | false;
4438+
44184439
interface NumberFormatOptions {
4419-
localeMatcher?: string | undefined;
4420-
style?: string | undefined;
4440+
localeMatcher?: "lookup" | "best fit" | undefined;
4441+
style?: NumberFormatOptionsStyle | undefined;
44214442
currency?: string | undefined;
4422-
currencySign?: string | undefined;
4423-
useGrouping?: boolean | undefined;
4443+
currencyDisplay?: NumberFormatOptionsCurrencyDisplay | undefined;
4444+
useGrouping?: NumberFormatOptionsUseGrouping | undefined;
44244445
minimumIntegerDigits?: number | undefined;
44254446
minimumFractionDigits?: number | undefined;
44264447
maximumFractionDigits?: number | undefined;
@@ -4431,14 +4452,15 @@ declare namespace Intl {
44314452
interface ResolvedNumberFormatOptions {
44324453
locale: string;
44334454
numberingSystem: string;
4434-
style: string;
4455+
style: NumberFormatOptionsStyle;
44354456
currency?: string;
4457+
currencyDisplay?: NumberFormatOptionsCurrencyDisplay;
44364458
minimumIntegerDigits: number;
4437-
minimumFractionDigits: number;
4438-
maximumFractionDigits: number;
4459+
minimumFractionDigits?: number;
4460+
maximumFractionDigits?: number;
44394461
minimumSignificantDigits?: number;
44404462
maximumSignificantDigits?: number;
4441-
useGrouping: boolean;
4463+
useGrouping: ResolvedNumberFormatOptionsUseGrouping;
44424464
}
44434465

44444466
interface NumberFormat {

src/lib/esnext.intl.d.ts

+1-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
11
declare namespace Intl {
2-
interface NumberRangeFormatPart extends NumberFormatPart {
3-
source: "startRange" | "endRange" | "shared";
4-
}
5-
6-
interface NumberFormat {
7-
formatRange(start: number | bigint, end: number | bigint): string;
8-
formatRangeToParts(start: number | bigint, end: number | bigint): NumberRangeFormatPart[];
9-
}
2+
// Empty
103
}

src/lib/libs.json

+1
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
"es2022.regexp",
7171
"es2023.array",
7272
"es2023.collection",
73+
"es2023.intl",
7374
"esnext.decorators",
7475
"esnext.intl",
7576
"esnext.disposable",

tests/baselines/reference/DateTimeFormatAndNumberFormatES2021.errors.txt

-20
This file was deleted.

tests/baselines/reference/DateTimeFormatAndNumberFormatES2021.js

-18
This file was deleted.

tests/baselines/reference/DateTimeFormatAndNumberFormatES2021.symbols

-43
This file was deleted.

tests/baselines/reference/DateTimeFormatAndNumberFormatES2021.types

-53
This file was deleted.

0 commit comments

Comments
 (0)