@@ -967,42 +967,46 @@ export function ToSecondsStringPrecision(options: Temporal.ToStringPrecisionOpti
967967export const REQUIRED = Symbol ( '~required~' ) ;
968968
969969interface 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 ;
975974type 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
981986export 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 ;
986992export 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.
9981002export 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