Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion tsc/internal/bundled/libs/lib.esnext.temporal.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,10 @@ declare namespace Temporal {
timeZoneName?: "auto" | "never" | "critical" | undefined;
}

interface ZonedDateTimeToLocaleStringOptions extends Intl.DateTimeFormatOptions {
timeZone?: never;
}

interface ZonedDateTimeFromOptions extends OverflowOptions, DisambiguationOptions {
offset?: "use" | "ignore" | "prefer" | "reject" | undefined;
}
Expand Down Expand Up @@ -317,7 +321,7 @@ declare namespace Temporal {
round(roundTo: RoundingOptions<"day" | TimeUnit>): ZonedDateTime;
equals(other: ZonedDateTimeLike): boolean;
toString(options?: ZonedDateTimeToStringOptions): string;
toLocaleString(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toLocaleString(locales?: Intl.LocalesArgument, options?: ZonedDateTimeToLocaleStringOptions): string;
toJSON(): string;
valueOf(): never;
startOfDay(): ZonedDateTime;
Expand Down
21 changes: 20 additions & 1 deletion tsc/testdata/baselines/reference/compiler/temporal.errors.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
temporal.ts(25,13): error TS2339: Property 'year' does not exist on type 'Instant'.
temporal.ts(594,47): error TS2322: Type 'string' is not assignable to type 'undefined'.
temporal.ts(1504,8): error TS2339: Property 'month' does not exist on type 'PlainMonthDay'.
temporal.ts(1514,8): error TS2339: Property 'month' does not exist on type 'PlainMonthDay'.
temporal.ts(1520,8): error TS2339: Property 'month' does not exist on type 'PlainMonthDay'.
temporal.ts(1826,45): error TS2345: Argument of type 'DateTimeFormatOptions' is not assignable to parameter of type 'ZonedDateTimeToLocaleStringOptions'.
Types of property 'timeZone' are incompatible.
Type 'string | undefined' is not assignable to type 'undefined'.
Type 'string' is not assignable to type 'undefined'.


==== temporal.ts (4 errors) ====
==== temporal.ts (6 errors) ====
/**
* Test cases derived from documentation at tc39/proposal-temporal,
* under the following license:
Expand Down Expand Up @@ -601,6 +606,8 @@ temporal.ts(1520,8): error TS2339: Property 'month' does not exist on type 'Plai
const options = { weekday: "long", year: "numeric", month: "long", day: "numeric" } as const;
zdt.toLocaleString("de-DE", options); // => 'Sonntag, 1. Dezember 2019'
/* WRONG */ zdt.toLocaleString("de-DE", { timeZone: "Pacific/Auckland" });
~~~~~~~~
!!! error TS2322: Type 'string' is not assignable to type 'undefined'.
// => RangeError: Time zone option Pacific/Auckland does not match actual time zone Europe/Berlin
zdt.withTimeZone("Pacific/Auckland").toLocaleString("de-DE"); // => '2.12.2019, 0:00:00 GMT+13'
zdt.toLocaleString("en-US-u-nu-fullwide-hc-h12"); // => '12/1/2019, 12:00:00 PM GMT+1'
Expand Down Expand Up @@ -1833,4 +1840,16 @@ temporal.ts(1520,8): error TS2339: Property 'month' does not exist on type 'Plai
Temporal.Now.plainTimeISO(); // get the current wall-clock time in the system time zone and ISO-8601 calendar
Temporal.Now.plainDateTimeISO(); // same as above, but return the DateTime in the ISO-8601 calendar
}

{
// Refused through a widened variable too, not only in an object literal.
const zdt = Temporal.ZonedDateTime.from("2019-12-01T12:00+01:00[Europe/Berlin]");
const widened: Intl.DateTimeFormatOptions = { timeZone: "Pacific/Auckland" };
/* WRONG */ zdt.toLocaleString("de-DE", widened);
~~~~~~~
!!! error TS2345: Argument of type 'DateTimeFormatOptions' is not assignable to parameter of type 'ZonedDateTimeToLocaleStringOptions'.
!!! error TS2345: Types of property 'timeZone' are incompatible.
!!! error TS2345: Type 'string | undefined' is not assignable to type 'undefined'.
!!! error TS2345: Type 'string' is not assignable to type 'undefined'.
}

13 changes: 13 additions & 0 deletions tsc/testdata/baselines/reference/compiler/temporal.js
Original file line number Diff line number Diff line change
Expand Up @@ -1821,6 +1821,13 @@
Temporal.Now.plainTimeISO(); // get the current wall-clock time in the system time zone and ISO-8601 calendar
Temporal.Now.plainDateTimeISO(); // same as above, but return the DateTime in the ISO-8601 calendar
}

{
// Refused through a widened variable too, not only in an object literal.
const zdt = Temporal.ZonedDateTime.from("2019-12-01T12:00+01:00[Europe/Berlin]");
const widened: Intl.DateTimeFormatOptions = { timeZone: "Pacific/Auckland" };
/* WRONG */ zdt.toLocaleString("de-DE", widened);
}


//// [temporal.js]
Expand Down Expand Up @@ -3371,3 +3378,9 @@
Temporal.Now.plainTimeISO(); // get the current wall-clock time in the system time zone and ISO-8601 calendar
Temporal.Now.plainDateTimeISO(); // same as above, but return the DateTime in the ISO-8601 calendar
}
{
// Refused through a widened variable too, not only in an object literal.
const zdt = Temporal.ZonedDateTime.from("2019-12-01T12:00+01:00[Europe/Berlin]");
const widened = { timeZone: "Pacific/Auckland" };
/* WRONG */ zdt.toLocaleString("de-DE", widened);
}
23 changes: 23 additions & 0 deletions tsc/testdata/baselines/reference/compiler/temporal.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -7029,3 +7029,26 @@
>plainDateTimeISO : Symbol(Temporal.Now.plainDateTimeISO, Decl(lib.esnext.temporal.d.ts, --, --))
}

{
// Refused through a widened variable too, not only in an object literal.
const zdt = Temporal.ZonedDateTime.from("2019-12-01T12:00+01:00[Europe/Berlin]");
>zdt : Symbol(zdt, Decl(temporal.ts, 1823, 9))
>Temporal.ZonedDateTime.from : Symbol(Temporal.ZonedDateTimeConstructor.from, Decl(lib.esnext.temporal.d.ts, --, --))
>Temporal.ZonedDateTime : Symbol(Temporal.ZonedDateTime, Decl(lib.esnext.temporal.d.ts, --, --), Decl(lib.esnext.temporal.d.ts, --, --))
>Temporal : Symbol(Temporal, Decl(lib.esnext.temporal.d.ts, --, --))
>ZonedDateTime : Symbol(Temporal.ZonedDateTime, Decl(lib.esnext.temporal.d.ts, --, --), Decl(lib.esnext.temporal.d.ts, --, --))
>from : Symbol(Temporal.ZonedDateTimeConstructor.from, Decl(lib.esnext.temporal.d.ts, --, --))

const widened: Intl.DateTimeFormatOptions = { timeZone: "Pacific/Auckland" };
>widened : Symbol(widened, Decl(temporal.ts, 1824, 9))
>Intl : Symbol(Intl, Decl(lib.es5.d.ts, --, --), Decl(lib.es2018.intl.d.ts, --, --), Decl(lib.es2020.intl.d.ts, --, --), Decl(lib.es2021.intl.d.ts, --, --), Decl(lib.es2025.intl.d.ts, --, --) ... and 1 more)
>DateTimeFormatOptions : Symbol(Intl.DateTimeFormatOptions, Decl(lib.es5.d.ts, --, --), Decl(lib.es2020.intl.d.ts, --, --), Decl(lib.es2021.intl.d.ts, --, --))
>timeZone : Symbol(timeZone, Decl(temporal.ts, 1824, 49))

/* WRONG */ zdt.toLocaleString("de-DE", widened);
>zdt.toLocaleString : Symbol(Temporal.ZonedDateTime.toLocaleString, Decl(lib.esnext.temporal.d.ts, --, --))
>zdt : Symbol(zdt, Decl(temporal.ts, 1823, 9))
>toLocaleString : Symbol(Temporal.ZonedDateTime.toLocaleString, Decl(lib.esnext.temporal.d.ts, --, --))
>widened : Symbol(widened, Decl(temporal.ts, 1824, 9))
}

56 changes: 42 additions & 14 deletions tsc/testdata/baselines/reference/compiler/temporal.types
Original file line number Diff line number Diff line change
Expand Up @@ -1598,9 +1598,9 @@
>zdt => zdt.toLocaleString("en", { month: "long" }) : (zdt: Temporal.ZonedDateTime) => string
>zdt : Temporal.ZonedDateTime
>zdt.toLocaleString("en", { month: "long" }) : string
>zdt.toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>zdt.toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>zdt : Temporal.ZonedDateTime
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>"en" : "en"
>{ month: "long" } : { month: "long"; }
>month : "long"
Expand Down Expand Up @@ -2604,15 +2604,15 @@

zdt.toLocaleString(); // example output: 12/1/2019, 12:00:00 PM
>zdt.toLocaleString() : string
>zdt.toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>zdt.toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>zdt : Temporal.ZonedDateTime
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string

zdt.toLocaleString("de-DE"); // => '1.12.2019, 12:00:00 MEZ'
>zdt.toLocaleString("de-DE") : string
>zdt.toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>zdt.toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>zdt : Temporal.ZonedDateTime
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>"de-DE" : "de-DE"

const options = { weekday: "long", year: "numeric", month: "long", day: "numeric" } as const;
Expand All @@ -2630,17 +2630,17 @@

zdt.toLocaleString("de-DE", options); // => 'Sonntag, 1. Dezember 2019'
>zdt.toLocaleString("de-DE", options) : string
>zdt.toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>zdt.toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>zdt : Temporal.ZonedDateTime
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>"de-DE" : "de-DE"
>options : { readonly weekday: "long"; readonly year: "numeric"; readonly month: "long"; readonly day: "numeric"; }

/* WRONG */ zdt.toLocaleString("de-DE", { timeZone: "Pacific/Auckland" });
>zdt.toLocaleString("de-DE", { timeZone: "Pacific/Auckland" }) : string
>zdt.toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>zdt.toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>zdt : Temporal.ZonedDateTime
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>"de-DE" : "de-DE"
>{ timeZone: "Pacific/Auckland" } : { timeZone: string; }
>timeZone : string
Expand All @@ -2649,20 +2649,20 @@
// => RangeError: Time zone option Pacific/Auckland does not match actual time zone Europe/Berlin
zdt.withTimeZone("Pacific/Auckland").toLocaleString("de-DE"); // => '2.12.2019, 0:00:00 GMT+13'
>zdt.withTimeZone("Pacific/Auckland").toLocaleString("de-DE") : string
>zdt.withTimeZone("Pacific/Auckland").toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>zdt.withTimeZone("Pacific/Auckland").toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>zdt.withTimeZone("Pacific/Auckland") : Temporal.ZonedDateTime
>zdt.withTimeZone : (timeZone: Temporal.TimeZoneLike) => Temporal.ZonedDateTime
>zdt : Temporal.ZonedDateTime
>withTimeZone : (timeZone: Temporal.TimeZoneLike) => Temporal.ZonedDateTime
>"Pacific/Auckland" : "Pacific/Auckland"
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>"de-DE" : "de-DE"

zdt.toLocaleString("en-US-u-nu-fullwide-hc-h12"); // => '12/1/2019, 12:00:00 PM GMT+1'
>zdt.toLocaleString("en-US-u-nu-fullwide-hc-h12") : string
>zdt.toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>zdt.toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>zdt : Temporal.ZonedDateTime
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>"en-US-u-nu-fullwide-hc-h12" : "en-US-u-nu-fullwide-hc-h12"
}

Expand Down Expand Up @@ -9126,3 +9126,31 @@
>plainDateTimeISO : (timeZone?: Temporal.TimeZoneLike) => Temporal.PlainDateTime
}

{
// Refused through a widened variable too, not only in an object literal.
const zdt = Temporal.ZonedDateTime.from("2019-12-01T12:00+01:00[Europe/Berlin]");
>zdt : Temporal.ZonedDateTime
>Temporal.ZonedDateTime.from("2019-12-01T12:00+01:00[Europe/Berlin]") : Temporal.ZonedDateTime
>Temporal.ZonedDateTime.from : (item: Temporal.ZonedDateTimeLike, options?: Temporal.ZonedDateTimeFromOptions) => Temporal.ZonedDateTime
>Temporal.ZonedDateTime : Temporal.ZonedDateTimeConstructor
>Temporal : typeof Temporal
>ZonedDateTime : Temporal.ZonedDateTimeConstructor
>from : (item: Temporal.ZonedDateTimeLike, options?: Temporal.ZonedDateTimeFromOptions) => Temporal.ZonedDateTime
>"2019-12-01T12:00+01:00[Europe/Berlin]" : "2019-12-01T12:00+01:00[Europe/Berlin]"

const widened: Intl.DateTimeFormatOptions = { timeZone: "Pacific/Auckland" };
>widened : Intl.DateTimeFormatOptions
>Intl : any
>{ timeZone: "Pacific/Auckland" } : { timeZone: string; }
>timeZone : string
>"Pacific/Auckland" : "Pacific/Auckland"

/* WRONG */ zdt.toLocaleString("de-DE", widened);
>zdt.toLocaleString("de-DE", widened) : string
>zdt.toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>zdt : Temporal.ZonedDateTime
>toLocaleString : (locales?: Intl.LocalesArgument, options?: Temporal.ZonedDateTimeToLocaleStringOptions) => string
>"de-DE" : "de-DE"
>widened : Intl.DateTimeFormatOptions
}

7 changes: 7 additions & 0 deletions tsc/testdata/tests/cases/compiler/temporal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1822,3 +1822,10 @@
Temporal.Now.plainTimeISO(); // get the current wall-clock time in the system time zone and ISO-8601 calendar
Temporal.Now.plainDateTimeISO(); // same as above, but return the DateTime in the ISO-8601 calendar
}

{
// Refused through a widened variable too, not only in an object literal.
const zdt = Temporal.ZonedDateTime.from("2019-12-01T12:00+01:00[Europe/Berlin]");
const widened: Intl.DateTimeFormatOptions = { timeZone: "Pacific/Auckland" };
/* WRONG */ zdt.toLocaleString("de-DE", widened);
}