diff --git a/src/lib/es2023.intl.d.ts b/src/lib/es2023.intl.d.ts index 91d29c3d04e30..9d580ed448c1d 100644 --- a/src/lib/es2023.intl.d.ts +++ b/src/lib/es2023.intl.d.ts @@ -9,6 +9,10 @@ declare namespace Intl { negative: never; } + interface NumberFormatPartTypeRegistry { + approximatelySign: never; + } + interface NumberFormatOptions { roundingPriority?: "auto" | "morePrecision" | "lessPrecision" | undefined; roundingIncrement?: 1 | 2 | 5 | 10 | 20 | 25 | 50 | 100 | 200 | 250 | 500 | 1000 | 2000 | 2500 | 5000 | undefined; diff --git a/tests/baselines/reference/intlNumberFormatES2023.js b/tests/baselines/reference/intlNumberFormatES2023.js index 983fe0ff00305..788f4fd755aad 100644 --- a/tests/baselines/reference/intlNumberFormatES2023.js +++ b/tests/baselines/reference/intlNumberFormatES2023.js @@ -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(""); diff --git a/tests/baselines/reference/intlNumberFormatES2023.symbols b/tests/baselines/reference/intlNumberFormatES2023.symbols index ade51253237e2..c9657d57e65cc 100644 --- a/tests/baselines/reference/intlNumberFormatES2023.symbols +++ b/tests/baselines/reference/intlNumberFormatES2023.symbols @@ -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, --, --)) + diff --git a/tests/baselines/reference/intlNumberFormatES2023.types b/tests/baselines/reference/intlNumberFormatES2023.types index 4063a0dcbec95..a05fed5f24e4e 100644 --- a/tests/baselines/reference/intlNumberFormatES2023.types +++ b/tests/baselines/reference/intlNumberFormatES2023.types @@ -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 : (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 : { (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 : { (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 : (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 +> : ^ ^^^ ^^^^^ +>"" : "" +> : ^^ + diff --git a/tests/cases/conformance/es2023/intlNumberFormatES2023.ts b/tests/cases/conformance/es2023/intlNumberFormatES2023.ts index 1255f41968994..a2f7c282baf70 100644 --- a/tests/cases/conformance/es2023/intlNumberFormatES2023.ts +++ b/tests/cases/conformance/es2023/intlNumberFormatES2023.ts @@ -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("");