Skip to content

Commit 9375e03

Browse files
committed
Only allow 'auto' for largestUnit calls of GetTemporalUnit.
1 parent 6f3c42c commit 9375e03

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

lib/ecmascript.ts

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -967,42 +967,46 @@ export function ToSecondsStringPrecision(options: Temporal.ToStringPrecisionOpti
967967
export const REQUIRED = Symbol('~required~');
968968

969969
interface TemporalUnitOptionsBag {
970-
smallestUnit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit | 'auto';
970+
smallestUnit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit;
971971
largestUnit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit | 'auto';
972-
unit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit | 'auto';
972+
unit?: Temporal.PluralUnit<Temporal.DateTimeUnit> | Temporal.DateTimeUnit;
973973
}
974-
type UnitOptionsBagKeys = keyof TemporalUnitOptionsBag;
975974
type UnitTypeMapping = {
976975
date: Temporal.DateUnit;
977976
time: Temporal.TimeUnit;
978977
datetime: Temporal.DateTimeUnit;
979978
};
979+
// This type specifies the allowed defaults for each unit key type.
980+
type AllowedGetTemporalUnitDefaultValues = {
981+
smallestUnit: undefined;
982+
largestUnit: 'auto' | undefined;
983+
unit: undefined;
984+
};
980985

981986
export function GetTemporalUnit<
987+
U extends keyof TemporalUnitOptionsBag,
982988
T extends keyof UnitTypeMapping,
983-
D extends typeof REQUIRED | UnitTypeMapping[T] | 'auto' | undefined,
989+
D extends typeof REQUIRED | UnitTypeMapping[T] | AllowedGetTemporalUnitDefaultValues[U],
984990
R extends Exclude<D, typeof REQUIRED> | UnitTypeMapping[T]
985-
>(options: TemporalUnitOptionsBag, key: UnitOptionsBagKeys, unitGroup: T, requiredOrDefault: D): R;
991+
>(options: TemporalUnitOptionsBag, key: U, unitGroup: T, requiredOrDefault: D): R;
986992
export function GetTemporalUnit<
993+
U extends keyof TemporalUnitOptionsBag,
987994
T extends keyof UnitTypeMapping,
988-
D extends typeof REQUIRED | UnitTypeMapping[T] | 'auto' | undefined,
995+
D extends typeof REQUIRED | UnitTypeMapping[T] | AllowedGetTemporalUnitDefaultValues[U],
989996
E extends 'auto' | Temporal.DateTimeUnit,
990997
R extends UnitTypeMapping[T] | Exclude<D, typeof REQUIRED> | E
991-
>(
992-
options: TemporalUnitOptionsBag,
993-
key: UnitOptionsBagKeys,
994-
unitGroup: T,
995-
requiredOrDefault: D,
996-
extraValues: ReadonlyArray<E>
997-
): R;
998+
>(options: TemporalUnitOptionsBag, key: U, unitGroup: T, requiredOrDefault: D, extraValues: ReadonlyArray<E>): R;
999+
// This signature of the function is NOT used in type-checking, so restricting
1000+
// the default value via generic binding like the other overloads isn't
1001+
// necessary.
9981002
export function GetTemporalUnit<
9991003
T extends keyof UnitTypeMapping,
10001004
D extends typeof REQUIRED | UnitTypeMapping[T] | 'auto' | undefined,
10011005
E extends 'auto' | Temporal.DateTimeUnit,
10021006
R extends UnitTypeMapping[T] | Exclude<D, typeof REQUIRED> | E
10031007
>(
10041008
options: TemporalUnitOptionsBag,
1005-
key: UnitOptionsBagKeys,
1009+
key: keyof typeof options,
10061010
unitGroup: T,
10071011
requiredOrDefault: D,
10081012
extraValues: ReadonlyArray<E> | never[] = []

0 commit comments

Comments
 (0)