Skip to content

Commit

Permalink
Duplicate Intl.LocalesArgument type for compat with older TS versions
Browse files Browse the repository at this point in the history
  • Loading branch information
lionel-rowe committed Feb 28, 2023
1 parent 0214e5e commit 6e689dc
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 12 deletions.
47 changes: 36 additions & 11 deletions index.d.ts
Expand Up @@ -548,7 +548,7 @@ export namespace Temporal {
subtract(other: Temporal.Duration | DurationLike | string, options?: DurationArithmeticOptions): Temporal.Duration;
round(roundTo: DurationRoundTo): Temporal.Duration;
total(totalOf: DurationTotalOf): number;
toLocaleString(locales?: globalThis.Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toLocaleString(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toJSON(): string;
toString(options?: ToStringPrecisionOptions): string;
valueOf(): never;
Expand Down Expand Up @@ -601,7 +601,7 @@ export namespace Temporal {
): Temporal.Instant;
toZonedDateTime(calendarAndTimeZone: { timeZone: TimeZoneLike; calendar: CalendarLike }): Temporal.ZonedDateTime;
toZonedDateTimeISO(tzLike: TimeZoneLike): Temporal.ZonedDateTime;
toLocaleString(locales?: globalThis.Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toLocaleString(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toJSON(): string;
toString(options?: InstantToStringOptions): string;
valueOf(): never;
Expand Down Expand Up @@ -836,7 +836,7 @@ export namespace Temporal {
toPlainYearMonth(): Temporal.PlainYearMonth;
toPlainMonthDay(): Temporal.PlainMonthDay;
getISOFields(): PlainDateISOFields;
toLocaleString(locales?: globalThis.Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toLocaleString(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toJSON(): string;
toString(options?: ShowCalendarOption): string;
valueOf(): never;
Expand Down Expand Up @@ -955,7 +955,7 @@ export namespace Temporal {
toPlainMonthDay(): Temporal.PlainMonthDay;
toPlainTime(): Temporal.PlainTime;
getISOFields(): PlainDateTimeISOFields;
toLocaleString(locales?: globalThis.Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toLocaleString(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toJSON(): string;
toString(options?: CalendarTypeToStringOptions): string;
valueOf(): never;
Expand Down Expand Up @@ -992,7 +992,7 @@ export namespace Temporal {
with(monthDayLike: PlainMonthDayLike, options?: AssignmentOptions): Temporal.PlainMonthDay;
toPlainDate(year: { year: number }): Temporal.PlainDate;
getISOFields(): PlainDateISOFields;
toLocaleString(locales?: globalThis.Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toLocaleString(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toJSON(): string;
toString(options?: ShowCalendarOption): string;
valueOf(): never;
Expand Down Expand Up @@ -1085,7 +1085,7 @@ export namespace Temporal {
plainDate: Temporal.PlainDate | PlainDateLike | string;
}): Temporal.ZonedDateTime;
getISOFields(): PlainTimeISOFields;
toLocaleString(locales?: globalThis.Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toLocaleString(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toJSON(): string;
toString(options?: ToStringPrecisionOptions): string;
valueOf(): never;
Expand Down Expand Up @@ -1199,7 +1199,7 @@ export namespace Temporal {
): Temporal.Duration;
toPlainDate(day: { day: number }): Temporal.PlainDate;
getISOFields(): PlainDateISOFields;
toLocaleString(locales?: globalThis.Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toLocaleString(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toJSON(): string;
toString(options?: ShowCalendarOption): string;
valueOf(): never;
Expand Down Expand Up @@ -1312,7 +1312,7 @@ export namespace Temporal {
toPlainMonthDay(): Temporal.PlainMonthDay;
toPlainTime(): Temporal.PlainTime;
getISOFields(): ZonedDateTimeISOFields;
toLocaleString(locales?: globalThis.Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toLocaleString(locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
toJSON(): string;
toString(options?: ZonedDateTimeToStringOptions): string;
valueOf(): never;
Expand Down Expand Up @@ -1537,16 +1537,41 @@ declare namespace Intl {
* Creates `Intl.DateTimeFormat` objects that enable language-sensitive
* date and time formatting.
*/
new (locales?: globalThis.Intl.LocalesArgument, options?: DateTimeFormatOptions): DateTimeFormat;
(locales?: globalThis.Intl.LocalesArgument, options?: DateTimeFormatOptions): DateTimeFormat;
new (locales?: Intl.LocalesArgument, options?: DateTimeFormatOptions): DateTimeFormat;
(locales?: Intl.LocalesArgument, options?: DateTimeFormatOptions): DateTimeFormat;

/**
* Get an array containing those of the provided locales that are supported
* in date and time formatting without having to fall back to the runtime's
* default locale.
*/
supportedLocalesOf(locales: globalThis.Intl.LocalesArgument, options?: DateTimeFormatOptions): string[];
supportedLocalesOf(locales: Intl.LocalesArgument, options?: DateTimeFormatOptions): string[];
};

// TODO: remove UnicodeBCP47LocaleIdentifier and LocalesArgument once TS lib declarations for these in widespread use

/**
* A string that is a valid [Unicode BCP 47 Locale
* Identifier](https://unicode.org/reports/tr35/#Unicode_locale_identifier).
*
* For example: "fa", "es-MX", "zh-Hant-TW".
*
* See [MDN - Intl - locales
* argument](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locales_argument).
*/
type UnicodeBCP47LocaleIdentifier = string;

/**
* The locale or locales to use
*
* See [MDN - Intl - locales
* argument](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#locales_argument).
*/
type LocalesArgument =
| UnicodeBCP47LocaleIdentifier
| globalThis.Intl.Locale
| readonly (UnicodeBCP47LocaleIdentifier | globalThis.Intl.Locale)[]
| undefined;
}

export { Intl as Intl };
Expand Down
5 changes: 4 additions & 1 deletion lib/intl.ts
Expand Up @@ -117,9 +117,10 @@ function DateTimeFormatImpl(
}
const hasOptions = typeof optionsParam !== 'undefined';
const options = hasOptions ? ObjectAssign({}, optionsParam) : {};
// TODO: remove type assertion after Temporal types land in TS lib types
const original = new IntlDateTimeFormat(
// TODO: remove type assertion after TS lib types updated per https://github.com/microsoft/TypeScript/issues/52946
locale as ConstructorParameters<typeof IntlDateTimeFormat>[0],
// TODO: remove type assertion after Temporal types land in TS lib types
options as globalThis.Intl.DateTimeFormatOptions
);
const ro = original.resolvedOptions();
Expand Down Expand Up @@ -173,7 +174,9 @@ DateTimeFormatImpl.supportedLocalesOf = function (
options: Params['supportedLocalesOf'][1]
) {
return IntlDateTimeFormat.supportedLocalesOf(
// TODO: remove type assertion after TS lib types updated per https://github.com/microsoft/TypeScript/issues/52946
locales as Parameters<typeof IntlDateTimeFormat['supportedLocalesOf']>[0],
// TODO: remove type assertion after Temporal types land in TS lib types
options as globalThis.Intl.DateTimeFormatOptions
);
};
Expand Down

0 comments on commit 6e689dc

Please sign in to comment.