Add approximatelySign to NumberFormatPartTypeRegistry for ES2023

Co-authored-by: RyanCavanaugh <6685088+RyanCavanaugh@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2025-07-07 19:09:35 +00:00
parent 64a51e8e28
commit 5de28dbf4d
5 changed files with 205 additions and 16 deletions

View File

@ -1,12 +1,16 @@
declare namespace Intl {
interface NumberFormatOptionsUseGroupingRegistry {
min2: never;
auto: never;
always: never;
}
interface NumberFormatOptionsSignDisplayRegistry {
negative: never;
declare namespace Intl {
interface NumberFormatOptionsUseGroupingRegistry {
min2: never;
auto: never;
always: never;
}
interface NumberFormatOptionsSignDisplayRegistry {
negative: never;
}
interface NumberFormatPartTypeRegistry {
approximatelySign: never;
}
interface NumberFormatOptions {

View File

@ -31,6 +31,19 @@ new Intl.NumberFormat('en-GB').formatRangeToParts('123E-4', '567E8');
new Intl.NumberFormat('en-GB').format('Infinity');
new Intl.NumberFormat('en-GB').format('-Infinity');
new Intl.NumberFormat('en-GB').format('+Infinity');
// Test approximatelySign part type
const nf = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "EUR",
maximumFractionDigits: 0,
});
nf
.formatRangeToParts(100, 100)
.filter((part) => part.type !== "approximatelySign")
.map((part) => part.value)
.join("");
//// [intlNumberFormatES2023.js]
@ -59,3 +72,14 @@ new Intl.NumberFormat('en-GB').formatRangeToParts('123E-4', '567E8');
new Intl.NumberFormat('en-GB').format('Infinity');
new Intl.NumberFormat('en-GB').format('-Infinity');
new Intl.NumberFormat('en-GB').format('+Infinity');
// Test approximatelySign part type
const nf = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "EUR",
maximumFractionDigits: 0,
});
nf
.formatRangeToParts(100, 100)
.filter((part) => part.type !== "approximatelySign")
.map((part) => part.value)
.join("");

View File

@ -130,3 +130,48 @@ new Intl.NumberFormat('en-GB').format('+Infinity');
>NumberFormat : Symbol(Intl.NumberFormat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2018.intl.d.ts, --, --), Decl(lib.es2020.bigint.d.ts, --, --), Decl(lib.es2023.intl.d.ts, --, --))
>format : Symbol(Intl.NumberFormat.format, Decl(lib.es5.d.ts, --, --), Decl(lib.es2020.bigint.d.ts, --, --), Decl(lib.es2023.intl.d.ts, --, --))
// Test approximatelySign part type
const nf = new Intl.NumberFormat("en-US", {
>nf : Symbol(nf, Decl(intlNumberFormatES2023.ts, 32, 5))
>Intl.NumberFormat : Symbol(Intl.NumberFormat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2018.intl.d.ts, --, --), Decl(lib.es2020.bigint.d.ts, --, --), Decl(lib.es2023.intl.d.ts, --, --))
>Intl : Symbol(Intl, Decl(lib.es5.d.ts, --, --), Decl(lib.es2016.intl.d.ts, --, --), Decl(lib.es2017.intl.d.ts, --, --), Decl(lib.es2018.intl.d.ts, --, --), Decl(lib.es2019.intl.d.ts, --, --) ... and 5 more)
>NumberFormat : Symbol(Intl.NumberFormat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2018.intl.d.ts, --, --), Decl(lib.es2020.bigint.d.ts, --, --), Decl(lib.es2023.intl.d.ts, --, --))
style: "currency",
>style : Symbol(style, Decl(intlNumberFormatES2023.ts, 32, 43))
currency: "EUR",
>currency : Symbol(currency, Decl(intlNumberFormatES2023.ts, 33, 20))
maximumFractionDigits: 0,
>maximumFractionDigits : Symbol(maximumFractionDigits, Decl(intlNumberFormatES2023.ts, 34, 18))
});
nf
>nf .formatRangeToParts(100, 100) .filter((part) => part.type !== "approximatelySign") .map((part) => part.value) .join : Symbol(Array.join, Decl(lib.es5.d.ts, --, --))
>nf .formatRangeToParts(100, 100) .filter((part) => part.type !== "approximatelySign") .map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --))
>nf .formatRangeToParts(100, 100) .filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>nf .formatRangeToParts : Symbol(Intl.NumberFormat.formatRangeToParts, Decl(lib.es2023.intl.d.ts, --, --))
>nf : Symbol(nf, Decl(intlNumberFormatES2023.ts, 32, 5))
.formatRangeToParts(100, 100)
>formatRangeToParts : Symbol(Intl.NumberFormat.formatRangeToParts, Decl(lib.es2023.intl.d.ts, --, --))
.filter((part) => part.type !== "approximatelySign")
>filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>part : Symbol(part, Decl(intlNumberFormatES2023.ts, 40, 11))
>part.type : Symbol(Intl.NumberFormatPart.type, Decl(lib.es2018.intl.d.ts, --, --))
>part : Symbol(part, Decl(intlNumberFormatES2023.ts, 40, 11))
>type : Symbol(Intl.NumberFormatPart.type, Decl(lib.es2018.intl.d.ts, --, --))
.map((part) => part.value)
>map : Symbol(Array.map, Decl(lib.es5.d.ts, --, --))
>part : Symbol(part, Decl(intlNumberFormatES2023.ts, 41, 8))
>part.value : Symbol(Intl.NumberFormatPart.value, Decl(lib.es2018.intl.d.ts, --, --))
>part : Symbol(part, Decl(intlNumberFormatES2023.ts, 41, 8))
>value : Symbol(Intl.NumberFormatPart.value, Decl(lib.es2018.intl.d.ts, --, --))
.join("");
>join : Symbol(Array.join, Decl(lib.es5.d.ts, --, --))

View File

@ -376,3 +376,106 @@ new Intl.NumberFormat('en-GB').format('+Infinity');
>'+Infinity' : "+Infinity"
> : ^^^^^^^^^^^
// Test approximatelySign part type
const nf = new Intl.NumberFormat("en-US", {
>nf : Intl.NumberFormat
> : ^^^^^^^^^^^^^^^^^
>new Intl.NumberFormat("en-US", { style: "currency", currency: "EUR", maximumFractionDigits: 0,}) : Intl.NumberFormat
> : ^^^^^^^^^^^^^^^^^
>Intl.NumberFormat : Intl.NumberFormatConstructor
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>Intl : typeof Intl
> : ^^^^^^^^^^^
>NumberFormat : Intl.NumberFormatConstructor
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>"en-US" : "en-US"
> : ^^^^^^^
>{ style: "currency", currency: "EUR", maximumFractionDigits: 0,} : { style: "currency"; currency: string; maximumFractionDigits: number; }
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
style: "currency",
>style : "currency"
> : ^^^^^^^^^^
>"currency" : "currency"
> : ^^^^^^^^^^
currency: "EUR",
>currency : string
> : ^^^^^^
>"EUR" : "EUR"
> : ^^^^^
maximumFractionDigits: 0,
>maximumFractionDigits : number
> : ^^^^^^
>0 : 0
> : ^
});
nf
>nf .formatRangeToParts(100, 100) .filter((part) => part.type !== "approximatelySign") .map((part) => part.value) .join("") : string
> : ^^^^^^
>nf .formatRangeToParts(100, 100) .filter((part) => part.type !== "approximatelySign") .map((part) => part.value) .join : (separator?: string) => string
> : ^ ^^^ ^^^^^
>nf .formatRangeToParts(100, 100) .filter((part) => part.type !== "approximatelySign") .map((part) => part.value) : string[]
> : ^^^^^^^^
>nf .formatRangeToParts(100, 100) .filter((part) => part.type !== "approximatelySign") .map : <U>(callbackfn: (value: Intl.NumberRangeFormatPart, index: number, array: Intl.NumberRangeFormatPart[]) => U, thisArg?: any) => U[]
> : ^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^
>nf .formatRangeToParts(100, 100) .filter((part) => part.type !== "approximatelySign") : Intl.NumberRangeFormatPart[]
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>nf .formatRangeToParts(100, 100) .filter : { <S extends Intl.NumberRangeFormatPart>(predicate: (value: Intl.NumberRangeFormatPart, index: number, array: Intl.NumberRangeFormatPart[]) => value is S, thisArg?: any): S[]; (predicate: (value: Intl.NumberRangeFormatPart, index: number, array: Intl.NumberRangeFormatPart[]) => unknown, thisArg?: any): Intl.NumberRangeFormatPart[]; }
> : ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>nf .formatRangeToParts(100, 100) : Intl.NumberRangeFormatPart[]
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>nf .formatRangeToParts : (start: number | bigint | Intl.StringNumericLiteral, end: number | bigint | Intl.StringNumericLiteral) => Intl.NumberRangeFormatPart[]
> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>nf : Intl.NumberFormat
> : ^^^^^^^^^^^^^^^^^
.formatRangeToParts(100, 100)
>formatRangeToParts : (start: number | bigint | Intl.StringNumericLiteral, end: number | bigint | Intl.StringNumericLiteral) => Intl.NumberRangeFormatPart[]
> : ^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>100 : 100
> : ^^^
>100 : 100
> : ^^^
.filter((part) => part.type !== "approximatelySign")
>filter : { <S extends Intl.NumberRangeFormatPart>(predicate: (value: Intl.NumberRangeFormatPart, index: number, array: Intl.NumberRangeFormatPart[]) => value is S, thisArg?: any): S[]; (predicate: (value: Intl.NumberRangeFormatPart, index: number, array: Intl.NumberRangeFormatPart[]) => unknown, thisArg?: any): Intl.NumberRangeFormatPart[]; }
> : ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>(part) => part.type !== "approximatelySign" : (part: Intl.NumberRangeFormatPart) => boolean
> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>part : Intl.NumberRangeFormatPart
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^
>part.type !== "approximatelySign" : boolean
> : ^^^^^^^
>part.type : keyof Intl.NumberFormatPartTypeRegistry
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>part : Intl.NumberRangeFormatPart
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^
>type : keyof Intl.NumberFormatPartTypeRegistry
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>"approximatelySign" : "approximatelySign"
> : ^^^^^^^^^^^^^^^^^^^
.map((part) => part.value)
>map : <U>(callbackfn: (value: Intl.NumberRangeFormatPart, index: number, array: Intl.NumberRangeFormatPart[]) => U, thisArg?: any) => U[]
> : ^ ^^ ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^ ^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^
>(part) => part.value : (part: Intl.NumberRangeFormatPart) => string
> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>part : Intl.NumberRangeFormatPart
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^
>part.value : string
> : ^^^^^^
>part : Intl.NumberRangeFormatPart
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^
>value : string
> : ^^^^^^
.join("");
>join : (separator?: string) => string
> : ^ ^^^ ^^^^^
>"" : ""
> : ^^

View File

@ -25,10 +25,23 @@ new Intl.NumberFormat('en-GB').formatRange(10n, 1000n);
new Intl.NumberFormat('en-GB').formatRangeToParts(10, 1000)[0];
new Intl.NumberFormat('en-GB').formatRangeToParts(10n, 1000n)[0];
// Arbitrary-precision string arguments
new Intl.NumberFormat('en-GB').format('-12.3E-4');
new Intl.NumberFormat('en-GB').formatRange('123.4', '567.8');
new Intl.NumberFormat('en-GB').formatRangeToParts('123E-4', '567E8');
new Intl.NumberFormat('en-GB').format('Infinity');
new Intl.NumberFormat('en-GB').format('-Infinity');
new Intl.NumberFormat('en-GB').format('+Infinity');
// Arbitrary-precision string arguments
new Intl.NumberFormat('en-GB').format('-12.3E-4');
new Intl.NumberFormat('en-GB').formatRange('123.4', '567.8');
new Intl.NumberFormat('en-GB').formatRangeToParts('123E-4', '567E8');
new Intl.NumberFormat('en-GB').format('Infinity');
new Intl.NumberFormat('en-GB').format('-Infinity');
new Intl.NumberFormat('en-GB').format('+Infinity');
// Test approximatelySign part type
const nf = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "EUR",
maximumFractionDigits: 0,
});
nf
.formatRangeToParts(100, 100)
.filter((part) => part.type !== "approximatelySign")
.map((part) => part.value)
.join("");