Skip to content

Commit 9efd66d

Browse files
committed
Use Symbol.toStringTag to distinguish temporal types
1 parent eb95c5a commit 9efd66d

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

src/type-utils.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,43 @@
11
import type { Temporal, TemporalType } from "./types.js";
22

33
export function isInstant(dt: TemporalType): dt is Temporal.Instant {
4-
return "epochMilliseconds" in dt && !("timeZoneId" in dt);
4+
return dt[Symbol.toStringTag] === "Temporal.Instant";
55
}
66

77
export function isZonedDateTime(
88
dt: TemporalType,
99
): dt is Temporal.ZonedDateTime {
10-
return "timeZoneId" in dt;
10+
return dt[Symbol.toStringTag] === "Temporal.ZonedDateTime";
1111
}
1212

1313
export function isPlainDateTime(
1414
dt: TemporalType,
1515
): dt is Temporal.PlainDateTime {
16-
return !("timeZoneId" in dt) && "year" in dt && "second" in dt;
16+
return dt[Symbol.toStringTag] === "Temporal.PlainDateTime";
1717
}
1818

1919
export function isPlainTime(dt: TemporalType): dt is Temporal.PlainTime {
20-
return "second" in dt && !("year" in dt);
20+
return dt[Symbol.toStringTag] === "Temporal.PlainTime";
2121
}
2222

2323
export function isPlainDate(dt: TemporalType): dt is Temporal.PlainDate {
24-
return "year" in dt && "day" in dt && !("second" in dt);
24+
return dt[Symbol.toStringTag] === "Temporal.PlainDate";
2525
}
2626

2727
export function isPlainYearMonth(
2828
dt: TemporalType,
2929
): dt is Temporal.PlainYearMonth {
30-
return "year" in dt && !("day" in dt);
30+
return dt[Symbol.toStringTag] === "Temporal.PlainYearMonth";
3131
}
3232

3333
export function isPlainMonthDay(
3434
dt: TemporalType,
3535
): dt is Temporal.PlainMonthDay {
36-
return "day" in dt && !("year" in dt);
36+
return dt[Symbol.toStringTag] === "Temporal.PlainMonthDay";
3737
}
3838

3939
export function isDuration(dt: TemporalType): dt is Temporal.Duration {
40-
return "seconds" in dt;
40+
return dt[Symbol.toStringTag] === "Temporal.Duration";
4141
}
4242

4343
export function isInstantArray(a: TemporalType[]): a is Temporal.Instant[] {
@@ -220,7 +220,7 @@ export function getConstructor(
220220
): typeof Temporal.PlainMonthDay;
221221
export function getConstructor(dt: Temporal.Duration): typeof Temporal.Duration;
222222
export function getConstructor(dt: TemporalType) {
223-
if ("years" in dt) {
223+
if (isDuration(dt)) {
224224
return dt.constructor as unknown as typeof Temporal.Duration;
225225
}
226226
if (isInstant(dt)) {

0 commit comments

Comments
 (0)